Skip to content

Commit 047c8c7

Browse files
committed
fix(snack-bar): Fix snack-bar Context types
1 parent 046b854 commit 047c8c7

File tree

2 files changed

+29
-17
lines changed

2 files changed

+29
-17
lines changed

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {
1919
MatSnackBarRef,
2020
SimpleSnackBar,
2121
} from './index';
22-
import {MAT_SNACK_BAR_DEFAULT_OPTIONS} from './snack-bar';
22+
import {MAT_SNACK_BAR_DEFAULT_OPTIONS, SnackBarTemplateContext} from './snack-bar';
2323
import {MATERIAL_ANIMATIONS} from '../core';
2424

2525
describe('MatSnackBar', () => {
@@ -571,7 +571,10 @@ describe('MatSnackBar', () => {
571571
});
572572

573573
it('should inject the snack bar reference into the component', () => {
574-
const snackBarRef = snackBar.openFromComponent(BurritosNotification);
574+
const snackBarRef = snackBar.openFromComponent<
575+
BurritosNotification,
576+
BurritosNotificationData
577+
>(BurritosNotification);
575578

576579
expect(snackBarRef.instance.snackBarRef)
577580
.withContext('Expected component to have an injected snack bar reference.')
@@ -998,7 +1001,7 @@ class ComponentWithChildViewContainer {
9981001
`,
9991002
})
10001003
class ComponentWithTemplateRef {
1001-
@ViewChild(TemplateRef) templateRef: TemplateRef<unknown>;
1004+
@ViewChild(TemplateRef) templateRef: TemplateRef<SnackBarTemplateContext<{value: string}>>;
10021005
localValue: string;
10031006
}
10041007

@@ -1011,7 +1014,8 @@ interface BurritosNotificationData {
10111014
template: '<p>Burritos are on the way.</p>',
10121015
})
10131016
class BurritosNotification {
1014-
snackBarRef = inject<MatSnackBarRef<BurritosNotification>>(MatSnackBarRef);
1017+
snackBarRef =
1018+
inject<MatSnackBarRef<BurritosNotification, BurritosNotificationData>>(MatSnackBarRef);
10151019
data = inject<BurritosNotificationData>(MAT_SNACK_BAR_DATA);
10161020
}
10171021

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

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ export const MAT_SNACK_BAR_DEFAULT_OPTIONS = new InjectionToken<MatSnackBarConfi
4242
},
4343
);
4444

45+
export interface SnackBarTemplateContext<D> {
46+
$implicit?: D | null;
47+
snackBarRef?: MatSnackBarRef<EmbeddedViewRef<SnackBarTemplateContext<D>>, D>;
48+
}
49+
4550
/**
4651
* Service to dispatch Material Design snack bar messages.
4752
*/
@@ -108,10 +113,10 @@ export class MatSnackBar implements OnDestroy {
108113
* @param template Template to be instantiated.
109114
* @param config Extra configuration for the snack bar.
110115
*/
111-
openFromTemplate<C extends D, D>(
112-
template: TemplateRef<C>,
116+
openFromTemplate<D>(
117+
template: TemplateRef<SnackBarTemplateContext<D>>,
113118
config?: MatSnackBarConfig<D>,
114-
): MatSnackBarRef<EmbeddedViewRef<C>, D> {
119+
): MatSnackBarRef<EmbeddedViewRef<SnackBarTemplateContext<D>>, D> {
115120
return this._attach(template, config);
116121
}
117122

@@ -192,27 +197,30 @@ export class MatSnackBar implements OnDestroy {
192197
content: ComponentType<T>,
193198
userConfig?: MatSnackBarConfig<D>,
194199
): MatSnackBarRef<T, D>;
195-
private _attach<D, C extends D>(
196-
content: TemplateRef<C>,
200+
private _attach<D>(
201+
content: TemplateRef<SnackBarTemplateContext<D>>,
197202
userConfig?: MatSnackBarConfig<D>,
198-
): MatSnackBarRef<EmbeddedViewRef<C>, D>;
199-
private _attach<T, D, C extends D>(
200-
content: ComponentType<T> | TemplateRef<C>,
203+
): MatSnackBarRef<EmbeddedViewRef<SnackBarTemplateContext<D>>, D>;
204+
private _attach<T, D>(
205+
content: ComponentType<T> | TemplateRef<SnackBarTemplateContext<D>>,
201206
userConfig?: MatSnackBarConfig<D>,
202-
): MatSnackBarRef<T | EmbeddedViewRef<C>, D> {
207+
): MatSnackBarRef<T | EmbeddedViewRef<SnackBarTemplateContext<D>>, D> {
203208
const config: MatSnackBarConfig<D> = {
204209
...new MatSnackBarConfig(),
205-
...this._defaultConfig,
210+
...(this._defaultConfig as MatSnackBarConfig<D>),
206211
...userConfig,
207212
};
208213
const overlayRef = this._createOverlay(config);
209214
const container = this._attachSnackBarContainer(overlayRef, config);
210-
const snackBarRef = new MatSnackBarRef(container, overlayRef);
215+
const snackBarRef = new MatSnackBarRef<T | EmbeddedViewRef<SnackBarTemplateContext<D>>, D>(
216+
container,
217+
overlayRef,
218+
);
211219

212220
if (content instanceof TemplateRef) {
213-
const portal = new TemplatePortal<C>(content, null!, {
221+
const portal = new TemplatePortal<SnackBarTemplateContext<D>>(content, null!, {
214222
$implicit: config.data,
215-
snackBarRef,
223+
snackBarRef: snackBarRef as MatSnackBarRef<EmbeddedViewRef<SnackBarTemplateContext<D>>, D>,
216224
});
217225

218226
snackBarRef.instance = container.attachTemplatePortal(portal);

0 commit comments

Comments
 (0)