Skip to content

Commit 3d1a1f1

Browse files
committed
Fixed some issues with flex sizing and min width
1 parent eddf43d commit 3d1a1f1

File tree

7 files changed

+48
-17
lines changed

7 files changed

+48
-17
lines changed

src/cdk-experimental/column-resize/overlay-handle.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {
8080
const initialOverlayOffset = this._getOverlayOffset();
8181
let overlayOffset = initialOverlayOffset;
8282
const initialSize = this._getOriginWidth();
83+
let originOffset = this._getOriginOffset();
8384
let size = initialSize;
8485
let overshot = 0;
8586

@@ -137,12 +138,16 @@ export abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {
137138

138139
this.resizeNotifier.triggerResize.next({columnId, size: computedNewSize});
139140

140-
const actualNewSize = this._getOriginWidth();
141-
const actualDeltaX = actualNewSize - size;
142-
size = actualNewSize;
141+
const originNewSize = this._getOriginWidth();
142+
const originNewOffset = this._getOriginOffset();
143+
const originOffsetDeltaX = originNewOffset - originOffset;
144+
const originSizeDeltaX = originNewSize - size;
145+
size = originNewSize;
146+
originOffset = originNewOffset;
147+
console.log(originOffsetDeltaX, originSizeDeltaX);
143148

144-
overshot += deltaX + (this._isLtr() ? -actualDeltaX : actualDeltaX);
145-
overlayOffset += actualDeltaX;
149+
overshot += deltaX + (this._isLtr() ? -originSizeDeltaX : originSizeDeltaX);
150+
overlayOffset += originSizeDeltaX + originOffsetDeltaX;
146151

147152
this._updateOverlayOffset(overlayOffset);
148153
});
@@ -159,6 +164,15 @@ export abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {
159164
return this.resizeRef.origin.nativeElement!.offsetWidth;
160165
}
161166

167+
private _getOriginOffset(): number {
168+
const originElement = this.resizeRef.origin.nativeElement!;
169+
const offsetLeft = originElement.offsetLeft;
170+
171+
return this._isLtr() ?
172+
offsetLeft :
173+
originElement.offsetParent!.offsetWidth - (offsetLeft + this._getOriginWidth());
174+
}
175+
162176
private _getOverlayOffset(): number {
163177
const overlayElement = this.resizeRef.overlayRef.overlayElement;
164178
return this._isLtr() ?

src/cdk-experimental/column-resize/resizable.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ export abstract class Resizable<HandleComponent extends ResizeOverlayHandle>
8383

8484
protected abstract getOverlayHandleComponentType(): Type<HandleComponent>;
8585

86-
8786
private _listenForRowHoverEvents(): void {
8887
const element = this.elementRef.nativeElement!;
8988
const takeUntilDestroyed = takeUntil<boolean>(this.destroyed);

src/cdk-experimental/column-resize/resize-ref.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ export class ResizeRef {
1414
readonly origin: ElementRef,
1515
readonly overlayRef: OverlayRef,
1616
readonly minPx: number,
17-
readonly maxPx: number) {}
17+
readonly maxPx: number,) {}
1818
}

src/cdk-experimental/column-resize/resize-strategy.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ export abstract class ResizeStrategy {
2929
*/
3030
@Injectable()
3131
export class TableLayoutFixedResizeStrategy extends ResizeStrategy {
32-
applyColumnSize(_: string, columnHeader: HTMLElement, sizeInPx: number): void {
33-
columnHeader.style.boxSizing = 'border-box';
32+
applyColumnSize(_: string, columnHeader: HTMLElement, sizeInPx: number): void {
3433
columnHeader.style.width = coerceCssPixelValue(sizeInPx);
3534
}
3635
}
@@ -78,7 +77,7 @@ export class CdkFlexTableResizeStrategy extends ResizeStrategy implements OnDest
7877
const cssSize = coerceCssPixelValue(sizeInPx);
7978

8079
(this._styleElement.sheet as CSSStyleSheet).insertRule(
81-
`${selector} {box-sizing: border-box;flex:0 0 ${cssSize}}`, index!);
80+
`${selector} {flex:0 0.01 ${cssSize}}`, index!);
8281
}
8382

8483
protected getColumnCssClass(cssFriendlyColumnName: string): string {

src/dev-app/column-resize/default-enabled/default-enabled-column-resize-demo.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8 example-table">
22
<!-- Position Column -->
33
<ng-container matColumnDef="position">
4-
<th mat-header-cell *matHeaderCellDef> No. </th>
4+
<th mat-header-cell *matHeaderCellDef [matResizableMaxPx]="100"> No. </th>
55
<td mat-cell *matCellDef="let element"> {{element.position}} </td>
66
</ng-container>
77

src/material-experimental/column-resize/_column-resize.scss

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,26 @@
1212
$resizable-active-divider: mat-color($primary, 500);
1313

1414
// Required for resizing to work properly.
15-
table.cdk-column-resize-with-resized-column {
15+
.mat-column-resize-table.cdk-column-resize-with-resized-column {
1616
table-layout: fixed;
1717
}
18+
19+
.mat-column-resize-flex {
20+
.mat-header-cell,
21+
.mat-cell {
22+
box-sizing: border-box;
23+
min-width: 32px;
24+
}
25+
}
1826

1927
.mat-header-cell {
2028
position: relative;
2129
}
2230

31+
.mat-resizable {
32+
box-sizing: border-box;
33+
}
34+
2335
.mat-header-cell:not(.mat-resizable)::after,
2436
.mat-resizable-handle {
2537
background: transparent;

src/material-experimental/column-resize/column-resize.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,16 @@ const PROVIDERS = [ColumnResizeNotifier, HeaderRowEventDispatcher, ColumnResizeN
2424
const TABLE_PROVIDERS = [...PROVIDERS, TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER];
2525
const FLEX_PROVIDERS = [...PROVIDERS, FLEX_RESIZE_STRATEGY_PROVIDER];
2626
const HOST_BINDINGS = {
27-
'[class]': 'getIdClass()',
2827
'[class.mat-column-resize-rtl]': 'directionality.value === "rtl"',
2928
};
29+
const TABLE_HOST_BINDINGS = {
30+
...HOST_BINDINGS,
31+
'[class]': '"mat-column-resize-table " + getIdClass()',
32+
}
33+
const FLEX_HOST_BINDINGS = {
34+
...HOST_BINDINGS,
35+
'[class]': '"mat-column-resize-flex " + getIdClass()',
36+
}
3037

3138
export abstract class AbstractMatColumnResize extends ColumnResize {
3239
getTableHeight() {
@@ -36,7 +43,7 @@ export abstract class AbstractMatColumnResize extends ColumnResize {
3643

3744
@Directive({
3845
selector: 'table[mat-table]',
39-
host: HOST_BINDINGS,
46+
host: TABLE_HOST_BINDINGS,
4047
providers: [
4148
...TABLE_PROVIDERS,
4249
{provide: ColumnResize, useExisting: MatDefaultEnabledColumnResize},
@@ -55,7 +62,7 @@ export class MatDefaultEnabledColumnResize extends AbstractMatColumnResize {
5562

5663
@Directive({
5764
selector: 'mat-table',
58-
host: HOST_BINDINGS,
65+
host: FLEX_HOST_BINDINGS,
5966
providers: [
6067
...FLEX_PROVIDERS,
6168
{provide: ColumnResize, useExisting: MatDefaultEnabledColumnResizeFlex},
@@ -74,7 +81,7 @@ export class MatDefaultEnabledColumnResizeFlex extends AbstractMatColumnResize {
7481

7582
@Directive({
7683
selector: 'table[mat-table][columnResize]',
77-
host: HOST_BINDINGS,
84+
host: TABLE_HOST_BINDINGS,
7885
providers: [
7986
...TABLE_PROVIDERS,
8087
{provide: ColumnResize, useExisting: MatColumnResize},
@@ -93,7 +100,7 @@ export class MatColumnResize extends AbstractMatColumnResize {
93100

94101
@Directive({
95102
selector: 'mat-table[columnResize]',
96-
host: HOST_BINDINGS,
103+
host: FLEX_HOST_BINDINGS,
97104
providers: [
98105
...FLEX_PROVIDERS,
99106
{provide: ColumnResize, useExisting: MatColumnResizeFlex},

0 commit comments

Comments
 (0)