Skip to content

Commit 7b03d48

Browse files
authored
refactor: remove remaining usages of PortalInjector (#18627)
Removes all of the remaining usages of the `PortalInjector` and marks it as deprecated.
1 parent d1607cb commit 7b03d48

File tree

5 files changed

+56
-45
lines changed

5 files changed

+56
-45
lines changed

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
ChangeDetectorRef,
1919
} from '@angular/core';
2020
import {Directionality} from '@angular/cdk/bidi';
21-
import {ComponentPortal, PortalInjector} from '@angular/cdk/portal';
21+
import {ComponentPortal} from '@angular/cdk/portal';
2222
import {Overlay, OverlayRef} from '@angular/cdk/overlay';
2323
import {CdkColumnDef} from '@angular/cdk/table';
2424
import {merge, Subject} from 'rxjs';
@@ -213,10 +213,14 @@ export abstract class Resizable<HandleComponent extends ResizeOverlayHandle>
213213
}
214214

215215
private _createHandlePortal(): ComponentPortal<HandleComponent> {
216-
const injector = new PortalInjector(this.injector, new WeakMap([[
217-
ResizeRef,
218-
new ResizeRef(this.elementRef, this.overlayRef!, this.minWidthPx, this.maxWidthPx),
219-
]]));
216+
const injector = Injector.create({
217+
parent: this.injector,
218+
providers: [{
219+
provide: ResizeRef,
220+
useValue: new ResizeRef(this.elementRef, this.overlayRef!, this.minWidthPx, this.maxWidthPx)
221+
}]
222+
});
223+
220224
return new ComponentPortal(this.getOverlayHandleComponentType(),
221225
this.viewContainerRef, injector);
222226
}

src/cdk-experimental/dialog/dialog.ts

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ import {
1515
Inject,
1616
ComponentRef,
1717
OnDestroy,
18-
Type
18+
Type,
19+
StaticProvider
1920
} from '@angular/core';
20-
import {ComponentPortal, PortalInjector, TemplatePortal} from '@angular/cdk/portal';
21+
import {ComponentPortal, TemplatePortal} from '@angular/cdk/portal';
2122
import {of as observableOf, Observable, Subject, defer} from 'rxjs';
2223
import {DialogRef} from './dialog-ref';
2324
import {Location} from '@angular/common';
@@ -198,9 +199,10 @@ export class Dialog implements OnDestroy {
198199
protected _attachDialogContainer(overlay: OverlayRef, config: DialogConfig): CdkDialogContainer {
199200
const container = config.containerComponent || this._injector.get(DIALOG_CONTAINER);
200201
const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
201-
const injector = new PortalInjector(userInjector || this._injector, new WeakMap([
202-
[DialogConfig, config]
203-
]));
202+
const injector = Injector.create({
203+
parent: userInjector || this._injector,
204+
providers: [{provide: DialogConfig, useValue: config}]
205+
});
204206
const containerPortal = new ComponentPortal(container, config.viewContainerRef, injector);
205207
const containerRef: ComponentRef<CdkDialogContainer> = overlay.attach(containerPortal);
206208
containerRef.instance._config = config;
@@ -270,24 +272,24 @@ export class Dialog implements OnDestroy {
270272
private _createInjector<T>(
271273
config: DialogConfig,
272274
dialogRef: DialogRef<T>,
273-
dialogContainer: CdkDialogContainer): PortalInjector {
275+
dialogContainer: CdkDialogContainer): Injector {
274276

275277
const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
276-
const injectionTokens = new WeakMap<any, any>([
277-
[this._injector.get(DIALOG_REF), dialogRef],
278-
[this._injector.get(DIALOG_CONTAINER), dialogContainer],
279-
[DIALOG_DATA, config.data]
280-
]);
278+
const providers: StaticProvider[] = [
279+
{provide: this._injector.get(DIALOG_REF), useValue: dialogRef},
280+
{provide: this._injector.get(DIALOG_CONTAINER), useValue: dialogContainer},
281+
{provide: DIALOG_DATA, useValue: config.data}
282+
];
281283

282284
if (config.direction &&
283285
(!userInjector || !userInjector.get<Directionality | null>(Directionality, null))) {
284-
injectionTokens.set(Directionality, {
285-
value: config.direction,
286-
change: observableOf()
286+
providers.push({
287+
provide: Directionality,
288+
useValue: {value: config.direction, change: observableOf()}
287289
});
288290
}
289291

290-
return new PortalInjector(userInjector || this._injector, injectionTokens);
292+
return Injector.create({parent: userInjector || this._injector, providers});
291293
}
292294

293295
/** Creates a new dialog ref. */

src/cdk/portal/portal-injector.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import {Injector} from '@angular/core';
1212
* Custom injector to be used when providing custom
1313
* injection tokens to components inside a portal.
1414
* @docs-private
15+
* @deprecated Use `Injector.create` instead.
16+
* @breaking-change 11.0.0
1517
*/
1618
export class PortalInjector implements Injector {
1719
constructor(

src/material/bottom-sheet/bottom-sheet.ts

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import {Directionality} from '@angular/cdk/bidi';
1010
import {Overlay, OverlayConfig, OverlayRef} from '@angular/cdk/overlay';
11-
import {ComponentPortal, ComponentType, PortalInjector, TemplatePortal} from '@angular/cdk/portal';
11+
import {ComponentPortal, ComponentType, TemplatePortal} from '@angular/cdk/portal';
1212
import {
1313
ComponentRef,
1414
Injectable,
@@ -19,6 +19,7 @@ import {
1919
InjectionToken,
2020
Inject,
2121
OnDestroy,
22+
StaticProvider,
2223
} from '@angular/core';
2324
import {Location} from '@angular/common';
2425
import {of as observableOf} from 'rxjs';
@@ -133,9 +134,10 @@ export class MatBottomSheet implements OnDestroy {
133134
config: MatBottomSheetConfig): MatBottomSheetContainer {
134135

135136
const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
136-
const injector = new PortalInjector(userInjector || this._injector, new WeakMap([
137-
[MatBottomSheetConfig, config]
138-
]));
137+
const injector = Injector.create({
138+
parent: userInjector || this._injector,
139+
providers: [{provide: MatBottomSheetConfig, useValue: config}]
140+
});
139141

140142
const containerPortal =
141143
new ComponentPortal(MatBottomSheetContainer, config.viewContainerRef, injector);
@@ -170,23 +172,23 @@ export class MatBottomSheet implements OnDestroy {
170172
* @param bottomSheetRef Reference to the bottom sheet.
171173
*/
172174
private _createInjector<T>(config: MatBottomSheetConfig,
173-
bottomSheetRef: MatBottomSheetRef<T>): PortalInjector {
175+
bottomSheetRef: MatBottomSheetRef<T>): Injector {
174176

175177
const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
176-
const injectionTokens = new WeakMap<any, any>([
177-
[MatBottomSheetRef, bottomSheetRef],
178-
[MAT_BOTTOM_SHEET_DATA, config.data]
179-
]);
178+
const providers: StaticProvider[] = [
179+
{provide: MatBottomSheetRef, useValue: bottomSheetRef},
180+
{provide: MAT_BOTTOM_SHEET_DATA, useValue: config.data}
181+
];
180182

181183
if (config.direction &&
182184
(!userInjector || !userInjector.get<Directionality | null>(Directionality, null))) {
183-
injectionTokens.set(Directionality, {
184-
value: config.direction,
185-
change: observableOf()
185+
providers.push({
186+
provide: Directionality,
187+
useValue: {value: config.direction, change: observableOf()}
186188
});
187189
}
188190

189-
return new PortalInjector(userInjector || this._injector, injectionTokens);
191+
return Injector.create({parent: userInjector || this._injector, providers});
190192
}
191193
}
192194

src/material/snack-bar/snack-bar.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import {LiveAnnouncer} from '@angular/cdk/a11y';
1010
import {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';
1111
import {Overlay, OverlayConfig, OverlayRef} from '@angular/cdk/overlay';
12-
import {ComponentPortal, ComponentType, PortalInjector, TemplatePortal} from '@angular/cdk/portal';
12+
import {ComponentPortal, ComponentType, TemplatePortal} from '@angular/cdk/portal';
1313
import {
1414
ComponentRef,
1515
EmbeddedViewRef,
@@ -155,9 +155,10 @@ export class MatSnackBar implements OnDestroy {
155155
config: MatSnackBarConfig): _SnackBarContainer {
156156

157157
const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
158-
const injector = new PortalInjector(userInjector || this._injector, new WeakMap([
159-
[MatSnackBarConfig, config]
160-
]));
158+
const injector = Injector.create({
159+
parent: userInjector || this._injector,
160+
providers: [{provide: MatSnackBarConfig, useValue: config}]
161+
});
161162

162163
const containerPortal =
163164
new ComponentPortal(this.snackBarContainerComponent, config.viewContainerRef, injector);
@@ -284,15 +285,15 @@ export class MatSnackBar implements OnDestroy {
284285
* @param config Config that was used to create the snack bar.
285286
* @param snackBarRef Reference to the snack bar.
286287
*/
287-
private _createInjector<T>(
288-
config: MatSnackBarConfig,
289-
snackBarRef: MatSnackBarRef<T>): PortalInjector {
290-
288+
private _createInjector<T>(config: MatSnackBarConfig, snackBarRef: MatSnackBarRef<T>): Injector {
291289
const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
292290

293-
return new PortalInjector(userInjector || this._injector, new WeakMap<any, any>([
294-
[MatSnackBarRef, snackBarRef],
295-
[MAT_SNACK_BAR_DATA, config.data]
296-
]));
291+
return Injector.create({
292+
parent: userInjector || this._injector,
293+
providers: [
294+
{provide: MatSnackBarRef, useValue: snackBarRef},
295+
{provide: MAT_SNACK_BAR_DATA, useValue: config.data}
296+
]
297+
});
297298
}
298299
}

0 commit comments

Comments
 (0)