Skip to content

Commit b6f7a86

Browse files
authored
refactor(multiple): switch experimental packages to inject (#29675)
Switches all the experimental packages to use `inject` instead of constructor-based injection.
1 parent edce906 commit b6f7a86

30 files changed

+239
-361
lines changed

src/cdk-experimental/column-resize/column-resize-directives/column-resize-flex.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Directive, ElementRef, NgZone} from '@angular/core';
9+
import {Directive, ElementRef, NgZone, inject} from '@angular/core';
1010
import {CdkTable} from '@angular/cdk/table';
1111

1212
import {ColumnResize} from '../column-resize';
@@ -24,14 +24,10 @@ import {FLEX_PROVIDERS} from './constants';
2424
standalone: true,
2525
})
2626
export class CdkColumnResizeFlex extends ColumnResize {
27-
constructor(
28-
readonly columnResizeNotifier: ColumnResizeNotifier,
29-
readonly elementRef: ElementRef<HTMLElement>,
30-
protected readonly eventDispatcher: HeaderRowEventDispatcher,
31-
protected readonly ngZone: NgZone,
32-
protected readonly notifier: ColumnResizeNotifierSource,
33-
protected readonly table: CdkTable<unknown>,
34-
) {
35-
super();
36-
}
27+
readonly columnResizeNotifier = inject(ColumnResizeNotifier);
28+
readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);
29+
protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);
30+
protected readonly ngZone = inject(NgZone);
31+
protected readonly notifier = inject(ColumnResizeNotifierSource);
32+
protected readonly table = inject<CdkTable<unknown>>(CdkTable);
3733
}

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

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Directive, ElementRef, NgZone} from '@angular/core';
9+
import {Directive, ElementRef, NgZone, inject} from '@angular/core';
1010
import {CdkTable} from '@angular/cdk/table';
1111

1212
import {ColumnResize} from '../column-resize';
@@ -24,14 +24,10 @@ import {TABLE_PROVIDERS} from './constants';
2424
standalone: true,
2525
})
2626
export class CdkColumnResize extends ColumnResize {
27-
constructor(
28-
readonly columnResizeNotifier: ColumnResizeNotifier,
29-
readonly elementRef: ElementRef<HTMLElement>,
30-
protected readonly eventDispatcher: HeaderRowEventDispatcher,
31-
protected readonly ngZone: NgZone,
32-
protected readonly notifier: ColumnResizeNotifierSource,
33-
protected readonly table: CdkTable<unknown>,
34-
) {
35-
super();
36-
}
27+
readonly columnResizeNotifier = inject(ColumnResizeNotifier);
28+
readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);
29+
protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);
30+
protected readonly ngZone = inject(NgZone);
31+
protected readonly notifier = inject(ColumnResizeNotifierSource);
32+
protected readonly table = inject<CdkTable<unknown>>(CdkTable);
3733
}

src/cdk-experimental/column-resize/column-resize-directives/default-enabled-column-resize-flex.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Directive, ElementRef, NgZone} from '@angular/core';
9+
import {Directive, ElementRef, NgZone, inject} from '@angular/core';
1010
import {CdkTable} from '@angular/cdk/table';
1111

1212
import {ColumnResize} from '../column-resize';
@@ -27,14 +27,10 @@ import {FLEX_PROVIDERS} from './constants';
2727
standalone: true,
2828
})
2929
export class CdkDefaultEnabledColumnResizeFlex extends ColumnResize {
30-
constructor(
31-
readonly columnResizeNotifier: ColumnResizeNotifier,
32-
readonly elementRef: ElementRef<HTMLElement>,
33-
protected readonly eventDispatcher: HeaderRowEventDispatcher,
34-
protected readonly ngZone: NgZone,
35-
protected readonly notifier: ColumnResizeNotifierSource,
36-
protected readonly table: CdkTable<unknown>,
37-
) {
38-
super();
39-
}
30+
readonly columnResizeNotifier = inject(ColumnResizeNotifier);
31+
readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);
32+
protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);
33+
protected readonly ngZone = inject(NgZone);
34+
protected readonly notifier = inject(ColumnResizeNotifierSource);
35+
protected readonly table = inject<CdkTable<unknown>>(CdkTable);
4036
}

src/cdk-experimental/column-resize/column-resize-directives/default-enabled-column-resize.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Directive, ElementRef, NgZone} from '@angular/core';
9+
import {Directive, ElementRef, NgZone, inject} from '@angular/core';
1010
import {CdkTable} from '@angular/cdk/table';
1111

1212
import {ColumnResize} from '../column-resize';
@@ -27,14 +27,10 @@ import {TABLE_PROVIDERS} from './constants';
2727
standalone: true,
2828
})
2929
export class CdkDefaultEnabledColumnResize extends ColumnResize {
30-
constructor(
31-
readonly columnResizeNotifier: ColumnResizeNotifier,
32-
readonly elementRef: ElementRef<HTMLElement>,
33-
protected readonly eventDispatcher: HeaderRowEventDispatcher,
34-
protected readonly ngZone: NgZone,
35-
protected readonly notifier: ColumnResizeNotifierSource,
36-
protected readonly table: CdkTable<unknown>,
37-
) {
38-
super();
39-
}
30+
readonly columnResizeNotifier = inject(ColumnResizeNotifier);
31+
readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);
32+
protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);
33+
protected readonly ngZone = inject(NgZone);
34+
protected readonly notifier = inject(ColumnResizeNotifierSource);
35+
protected readonly table = inject<CdkTable<unknown>>(CdkTable);
4036
}

src/cdk-experimental/column-resize/event-dispatcher.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Injectable, NgZone} from '@angular/core';
9+
import {Injectable, NgZone, inject} from '@angular/core';
1010
import {combineLatest, MonoTypeOperatorFunction, Observable, Subject} from 'rxjs';
1111
import {distinctUntilChanged, map, share, skip, startWith} from 'rxjs/operators';
1212

@@ -17,6 +17,8 @@ import {HEADER_ROW_SELECTOR} from './selectors';
1717
/** Coordinates events between the column resize directives. */
1818
@Injectable()
1919
export class HeaderRowEventDispatcher {
20+
private readonly _ngZone = inject(NgZone);
21+
2022
/**
2123
* Emits the currently hovered header cell or null when no header cells are hovered.
2224
* Exposed publicly for events to feed in, but subscribers should use headerCellHoveredDistinct,
@@ -30,8 +32,6 @@ export class HeaderRowEventDispatcher {
3032
*/
3133
readonly overlayHandleActiveForCell = new Subject<Element | null>();
3234

33-
constructor(private readonly _ngZone: NgZone) {}
34-
3535
/** Distinct and shared version of headerCellHovered. */
3636
readonly headerCellHoveredDistinct = this.headerCellHovered.pipe(distinctUntilChanged(), share());
3737

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

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Inject, Injectable, OnDestroy, Provider, CSP_NONCE, Optional} from '@angular/core';
9+
import {Injectable, OnDestroy, Provider, CSP_NONCE, inject} from '@angular/core';
1010
import {DOCUMENT} from '@angular/common';
1111
import {coerceCssPixelValue} from '@angular/cdk/coercion';
1212
import {CdkTable, _CoalescedStyleScheduler, _COALESCED_STYLE_SCHEDULER} from '@angular/cdk/table';
@@ -77,14 +77,9 @@ export abstract class ResizeStrategy {
7777
*/
7878
@Injectable()
7979
export class TableLayoutFixedResizeStrategy extends ResizeStrategy {
80-
constructor(
81-
protected readonly columnResize: ColumnResize,
82-
@Inject(_COALESCED_STYLE_SCHEDULER)
83-
protected readonly styleScheduler: _CoalescedStyleScheduler,
84-
protected readonly table: CdkTable<unknown>,
85-
) {
86-
super();
87-
}
80+
protected readonly columnResize = inject(ColumnResize);
81+
protected readonly styleScheduler = inject<_CoalescedStyleScheduler>(_COALESCED_STYLE_SCHEDULER);
82+
protected readonly table = inject<CdkTable<unknown>>(CdkTable);
8883

8984
applyColumnSize(
9085
_: string,
@@ -128,7 +123,12 @@ export class TableLayoutFixedResizeStrategy extends ResizeStrategy {
128123
*/
129124
@Injectable()
130125
export class CdkFlexTableResizeStrategy extends ResizeStrategy implements OnDestroy {
131-
private readonly _document: Document;
126+
protected readonly columnResize = inject(ColumnResize);
127+
protected readonly styleScheduler = inject<_CoalescedStyleScheduler>(_COALESCED_STYLE_SCHEDULER);
128+
protected readonly table = inject<CdkTable<unknown>>(CdkTable);
129+
private readonly _nonce = inject(CSP_NONCE, {optional: true});
130+
131+
private readonly _document = inject(DOCUMENT);
132132
private readonly _columnIndexes = new Map<string, number>();
133133
private readonly _columnProperties = new Map<string, Map<string, string>>();
134134

@@ -138,18 +138,6 @@ export class CdkFlexTableResizeStrategy extends ResizeStrategy implements OnDest
138138
protected readonly defaultMinSize = 0;
139139
protected readonly defaultMaxSize = Number.MAX_SAFE_INTEGER;
140140

141-
constructor(
142-
protected readonly columnResize: ColumnResize,
143-
@Inject(_COALESCED_STYLE_SCHEDULER)
144-
protected readonly styleScheduler: _CoalescedStyleScheduler,
145-
protected readonly table: CdkTable<unknown>,
146-
@Inject(DOCUMENT) document: any,
147-
@Inject(CSP_NONCE) @Optional() private readonly _nonce?: string | null,
148-
) {
149-
super();
150-
this._document = document;
151-
}
152-
153141
applyColumnSize(
154142
cssFriendlyColumnName: string,
155143
columnHeader: HTMLElement,

src/cdk-experimental/combobox/combobox-popup.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Directive, ElementRef, Inject, Input, OnInit} from '@angular/core';
9+
import {Directive, ElementRef, Input, OnInit, inject} from '@angular/core';
1010
import {AriaHasPopupValue, CDK_COMBOBOX, CdkCombobox} from './combobox';
1111

1212
let nextId = 0;
@@ -24,6 +24,9 @@ let nextId = 0;
2424
standalone: true,
2525
})
2626
export class CdkComboboxPopup<T = unknown> implements OnInit {
27+
private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);
28+
private readonly _combobox = inject<CdkCombobox>(CDK_COMBOBOX);
29+
2730
@Input()
2831
get role(): AriaHasPopupValue {
2932
return this._role;
@@ -44,11 +47,6 @@ export class CdkComboboxPopup<T = unknown> implements OnInit {
4447

4548
@Input() id = `cdk-combobox-popup-${nextId++}`;
4649

47-
constructor(
48-
private readonly _elementRef: ElementRef<HTMLElement>,
49-
@Inject(CDK_COMBOBOX) private readonly _combobox: CdkCombobox,
50-
) {}
51-
5250
ngOnInit() {
5351
this.registerWithPanel();
5452
}

src/cdk-experimental/combobox/combobox.ts

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@ import {
2323
Directive,
2424
ElementRef,
2525
EventEmitter,
26-
Inject,
2726
InjectionToken,
2827
Injector,
2928
Input,
3029
OnDestroy,
31-
Optional,
3230
Output,
3331
TemplateRef,
3432
ViewContainerRef,
@@ -63,6 +61,16 @@ export const CDK_COMBOBOX = new InjectionToken<CdkCombobox>('CDK_COMBOBOX');
6361
standalone: true,
6462
})
6563
export class CdkCombobox<T = unknown> implements OnDestroy {
64+
private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);
65+
private readonly _overlay = inject(Overlay);
66+
protected readonly _viewContainerRef = inject(ViewContainerRef);
67+
private readonly _injector = inject(Injector);
68+
private readonly _doc = inject(DOCUMENT);
69+
private readonly _directionality = inject(Directionality, {optional: true});
70+
private _changeDetectorRef = inject(ChangeDetectorRef);
71+
private _overlayRef: OverlayRef;
72+
private _panelPortal: TemplatePortal;
73+
6674
@Input('cdkComboboxTriggerFor')
6775
_panelTemplateRef: TemplateRef<unknown>;
6876

@@ -103,23 +111,9 @@ export class CdkCombobox<T = unknown> implements OnDestroy {
103111
T[]
104112
>();
105113

106-
private _overlayRef: OverlayRef;
107-
private _panelPortal: TemplatePortal;
108-
109114
contentId: string = '';
110115
contentType: AriaHasPopupValue;
111116

112-
private _changeDetectorRef = inject(ChangeDetectorRef);
113-
114-
constructor(
115-
private readonly _elementRef: ElementRef<HTMLElement>,
116-
private readonly _overlay: Overlay,
117-
protected readonly _viewContainerRef: ViewContainerRef,
118-
private readonly _injector: Injector,
119-
@Inject(DOCUMENT) private readonly _doc: any,
120-
@Optional() private readonly _directionality?: Directionality,
121-
) {}
122-
123117
ngOnDestroy() {
124118
if (this._overlayRef) {
125119
this._overlayRef.dispose();
@@ -260,7 +254,7 @@ export class CdkCombobox<T = unknown> implements OnDestroy {
260254
return new OverlayConfig({
261255
positionStrategy: this._getOverlayPositionStrategy(),
262256
scrollStrategy: this._overlay.scrollStrategies.block(),
263-
direction: this._directionality,
257+
direction: this._directionality || undefined,
264258
});
265259
}
266260

src/cdk-experimental/popover-edit/edit-event-dispatcher.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Injectable, NgZone} from '@angular/core';
9+
import {Injectable, NgZone, inject} from '@angular/core';
1010
import {combineLatest, MonoTypeOperatorFunction, Observable, pipe, Subject} from 'rxjs';
1111
import {
1212
audit,
@@ -50,6 +50,8 @@ export enum HoverContentState {
5050
*/
5151
@Injectable()
5252
export class EditEventDispatcher<R> {
53+
private readonly _ngZone = inject(NgZone);
54+
5355
/** A subject that indicates which table cell is currently editing (unless it is disabled). */
5456
readonly editing = new Subject<Element | null>();
5557

@@ -155,7 +157,7 @@ export class EditEventDispatcher<R> {
155157
private _lastSeenRow: Element | null = null;
156158
private _lastSeenRowHoverOrFocus: Observable<HoverContentState> | null = null;
157159

158-
constructor(private readonly _ngZone: NgZone) {
160+
constructor() {
159161
this._editingAndEnabledDistinct.subscribe(cell => {
160162
this._currentlyEditing = cell;
161163
});

src/cdk-experimental/popover-edit/edit-ref.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Injectable, OnDestroy, Self, afterNextRender, inject, Injector} from '@angular/core';
9+
import {Injectable, OnDestroy, afterNextRender, inject, Injector} from '@angular/core';
1010
import {ControlContainer} from '@angular/forms';
1111
import {Observable, Subject} from 'rxjs';
1212

@@ -18,6 +18,10 @@ import {EditEventDispatcher} from './edit-event-dispatcher';
1818
*/
1919
@Injectable()
2020
export class EditRef<FormValue> implements OnDestroy {
21+
private readonly _form = inject(ControlContainer, {self: true});
22+
private readonly _editEventDispatcher =
23+
inject<EditEventDispatcher<EditRef<FormValue>>>(EditEventDispatcher);
24+
2125
/** Emits the final value of this edit instance before closing. */
2226
private readonly _finalValueSubject = new Subject<FormValue>();
2327
readonly finalValue: Observable<FormValue> = this._finalValueSubject;
@@ -31,10 +35,7 @@ export class EditRef<FormValue> implements OnDestroy {
3135

3236
private _injector = inject(Injector);
3337

34-
constructor(
35-
@Self() private readonly _form: ControlContainer,
36-
private readonly _editEventDispatcher: EditEventDispatcher<EditRef<FormValue>>,
37-
) {
38+
constructor() {
3839
this._editEventDispatcher.setActiveEditRef(this);
3940
}
4041

src/cdk-experimental/popover-edit/edit-services.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Injectable, NgZone} from '@angular/core';
9+
import {Injectable, NgZone, inject} from '@angular/core';
1010
import {FocusTrapFactory} from '@angular/cdk/a11y';
1111
import {Directionality} from '@angular/cdk/bidi';
1212
import {Overlay} from '@angular/cdk/overlay';
@@ -24,14 +24,12 @@ import {EditRef} from './edit-ref';
2424
*/
2525
@Injectable()
2626
export class EditServices {
27-
constructor(
28-
readonly directionality: Directionality,
29-
readonly editEventDispatcher: EditEventDispatcher<EditRef<unknown>>,
30-
readonly focusDispatcher: FocusDispatcher,
31-
readonly focusTrapFactory: FocusTrapFactory,
32-
readonly ngZone: NgZone,
33-
readonly overlay: Overlay,
34-
readonly scrollDispatcher: ScrollDispatcher,
35-
readonly viewportRuler: ViewportRuler,
36-
) {}
27+
readonly directionality = inject(Directionality);
28+
readonly editEventDispatcher = inject<EditEventDispatcher<EditRef<unknown>>>(EditEventDispatcher);
29+
readonly focusDispatcher = inject(FocusDispatcher);
30+
readonly focusTrapFactory = inject(FocusTrapFactory);
31+
readonly ngZone = inject(NgZone);
32+
readonly overlay = inject(Overlay);
33+
readonly scrollDispatcher = inject(ScrollDispatcher);
34+
readonly viewportRuler = inject(ViewportRuler);
3735
}

0 commit comments

Comments
 (0)