Skip to content

Commit dda2e0f

Browse files
authored
refactor(multiple): resolve rxjs 7 compilation errors (#22566)
Fixes a few places that will become compilation errors in rxjs version 7. All of the changes are backwards-compatible so we can merge them now so that we have less issues to resolve once we make the switch.
1 parent 355233d commit dda2e0f

File tree

14 files changed

+42
-74
lines changed

14 files changed

+42
-74
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export class CdkComboboxPanel<T = unknown> {
3333

3434
/** Tells the parent combobox to close the panel and sends back the content value. */
3535
closePanel(data?: T | T[]) {
36-
this.valueUpdated.next(data);
36+
this.valueUpdated.next(data || []);
3737
}
3838

3939
// TODO: instead of using a focus function, potentially use cdk/a11y focus trapping

src/cdk-experimental/menu/context-menu.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import {coerceBooleanProperty, BooleanInput} from '@angular/cdk/coercion';
3131
import {Subject, merge} from 'rxjs';
3232
import {takeUntil} from 'rxjs/operators';
3333
import {CdkMenuPanel} from './menu-panel';
34-
import {MenuStack, MenuStackItem} from './menu-stack';
34+
import {MenuStack} from './menu-stack';
3535
import {throwExistingMenuStackError} from './menu-errors';
3636
import {isClickInsideMenuOverlay} from './menu-item-trigger';
3737

@@ -271,7 +271,7 @@ export class CdkContextMenuTrigger implements OnDestroy {
271271

272272
/** Subscribe to the menu stack close events and close this menu when requested. */
273273
private _setMenuStackListener() {
274-
this._menuStack.closed.pipe(takeUntil(this._destroyed)).subscribe((item: MenuStackItem) => {
274+
this._menuStack.closed.pipe(takeUntil(this._destroyed)).subscribe(item => {
275275
if (item === this._menuPanel._menu && this.isOpen()) {
276276
this.closed.next();
277277
this._overlayRef!.detach();

src/cdk-experimental/menu/menu-bar.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -199,33 +199,35 @@ export class CdkMenuBar extends CdkMenuGroup implements Menu, AfterContentInit,
199199
private _subscribeToMenuStack() {
200200
this._menuStack.closed
201201
.pipe(takeUntil(this._destroyed))
202-
.subscribe((item: MenuStackItem) => this._closeOpenMenu(item));
202+
.subscribe(item => this._closeOpenMenu(item));
203203

204204
this._menuStack.emptied
205205
.pipe(takeUntil(this._destroyed))
206-
.subscribe((event: FocusNext) => this._toggleOpenMenu(event));
206+
.subscribe(event => this._toggleOpenMenu(event));
207207
}
208208

209209
/**
210210
* Close the open menu if the current active item opened the requested MenuStackItem.
211211
* @param item the MenuStackItem requested to be closed.
212212
*/
213-
private _closeOpenMenu(menu: MenuStackItem) {
213+
private _closeOpenMenu(menu: MenuStackItem | undefined) {
214214
const trigger = this._openItem;
215215
const keyManager = this._keyManager;
216216
if (menu === trigger?.getMenuTrigger()?.getMenu()) {
217-
trigger.getMenuTrigger()?.closeMenu();
217+
trigger?.getMenuTrigger()?.closeMenu();
218218
// If the user has moused over a sibling item we want to focus the element under mouse focus
219219
// not the trigger which previously opened the now closed menu.
220-
keyManager.setActiveItem(this._pointerTracker?.activeElement || trigger);
220+
if (trigger) {
221+
keyManager.setActiveItem(this._pointerTracker?.activeElement || trigger);
222+
}
221223
}
222224
}
223225

224226
/**
225227
* Set focus to either the current, previous or next item based on the FocusNext event, then
226228
* open the previous or next item.
227229
*/
228-
private _toggleOpenMenu(event: FocusNext) {
230+
private _toggleOpenMenu(event: FocusNext | undefined) {
229231
const keyManager = this._keyManager;
230232
switch (event) {
231233
case FocusNext.nextItem:

src/cdk-experimental/menu/menu-stack.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,20 @@ export class MenuStack {
3434
private readonly _elements: MenuStackItem[] = [];
3535

3636
/** Emits the element which was popped off of the stack when requested by a closer. */
37-
private readonly _close: Subject<MenuStackItem> = new Subject();
37+
private readonly _close: Subject<MenuStackItem | undefined> = new Subject();
3838

3939
/** Emits once the MenuStack has become empty after popping off elements. */
40-
private readonly _empty: Subject<FocusNext> = new Subject();
40+
private readonly _empty: Subject<FocusNext | undefined> = new Subject();
4141

4242
/** Observable which emits the MenuStackItem which has been requested to close. */
43-
readonly closed: Observable<MenuStackItem> = this._close;
43+
readonly closed: Observable<MenuStackItem | undefined> = this._close;
4444

4545
/**
4646
* Observable which emits when the MenuStack is empty after popping off the last element. It
4747
* emits a FocusNext event which specifies the action the closer has requested the listener
4848
* perform.
4949
*/
50-
readonly emptied: Observable<FocusNext> = this._empty;
50+
readonly emptied: Observable<FocusNext | undefined> = this._empty;
5151

5252
/** @param menu the MenuStackItem to put on the stack. */
5353
push(menu: MenuStackItem) {
@@ -64,7 +64,7 @@ export class MenuStack {
6464
*/
6565
close(lastItem: MenuStackItem, focusNext?: FocusNext) {
6666
if (this._elements.indexOf(lastItem) >= 0) {
67-
let poppedElement;
67+
let poppedElement: MenuStackItem | undefined;
6868
do {
6969
poppedElement = this._elements.pop();
7070
this._close.next(poppedElement);

src/cdk-experimental/menu/menu.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -261,30 +261,32 @@ export class CdkMenu extends CdkMenuGroup implements Menu, AfterContentInit, OnI
261261
private _subscribeToMenuStack() {
262262
this._menuStack.closed
263263
.pipe(takeUntil(this.closed))
264-
.subscribe((item: MenuStackItem) => this._closeOpenMenu(item));
264+
.subscribe(item => this._closeOpenMenu(item));
265265

266266
this._menuStack.emptied
267267
.pipe(takeUntil(this.closed))
268-
.subscribe((event: FocusNext) => this._toggleMenuFocus(event));
268+
.subscribe(event => this._toggleMenuFocus(event));
269269
}
270270

271271
/**
272272
* Close the open menu if the current active item opened the requested MenuStackItem.
273273
* @param item the MenuStackItem requested to be closed.
274274
*/
275-
private _closeOpenMenu(menu: MenuStackItem) {
275+
private _closeOpenMenu(menu: MenuStackItem | undefined) {
276276
const keyManager = this._keyManager;
277277
const trigger = this._openItem;
278278
if (menu === trigger?.getMenuTrigger()?.getMenu()) {
279-
trigger.getMenuTrigger()?.closeMenu();
279+
trigger?.getMenuTrigger()?.closeMenu();
280280
// If the user has moused over a sibling item we want to focus the element under mouse focus
281281
// not the trigger which previously opened the now closed menu.
282-
keyManager.setActiveItem(this._pointerTracker?.activeElement || trigger);
282+
if (trigger) {
283+
keyManager.setActiveItem(this._pointerTracker?.activeElement || trigger);
284+
}
283285
}
284286
}
285287

286288
/** Set focus the either the current, previous or next item based on the FocusNext event. */
287-
private _toggleMenuFocus(event: FocusNext) {
289+
private _toggleMenuFocus(event: FocusNext | undefined) {
288290
const keyManager = this._keyManager;
289291
switch (event) {
290292
case FocusNext.nextItem:

src/components-examples/cdk-experimental/selection/cdk-selection-column/cdk-selection-column-example.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {SelectionChange} from '@angular/cdk-experimental/selection';
2-
import {Component, OnDestroy} from '@angular/core';
3-
import {ReplaySubject} from 'rxjs';
2+
import {Component} from '@angular/core';
43

54
/**
65
* @title CDK Selection Column on a CDK table.
@@ -10,18 +9,11 @@ import {ReplaySubject} from 'rxjs';
109
templateUrl: 'cdk-selection-column-example.html',
1110
styleUrls: ['cdk-selection-column-example.css'],
1211
})
13-
export class CdkSelectionColumnExample implements OnDestroy {
14-
private readonly _destroyed = new ReplaySubject(1);
15-
12+
export class CdkSelectionColumnExample {
1613
displayedColumns: string[] = ['select', 'position', 'name', 'weight', 'symbol'];
1714
dataSource = ELEMENT_DATA;
1815
selected: string[] = [];
1916

20-
ngOnDestroy() {
21-
this._destroyed.next();
22-
this._destroyed.complete();
23-
}
24-
2517
selectionChanged(event: SelectionChange<PeriodicElement>) {
2618
this.selected = event.after.map((select) => select.value.name);
2719
}

src/components-examples/cdk-experimental/selection/cdk-selection-list/cdk-selection-list-example.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {SelectionChange} from '@angular/cdk-experimental/selection';
2-
import {Component, OnDestroy} from '@angular/core';
3-
import {ReplaySubject} from 'rxjs';
2+
import {Component} from '@angular/core';
43

54
/**
65
* @title CDK Selection on a simple list.
@@ -9,26 +8,18 @@ import {ReplaySubject} from 'rxjs';
98
selector: 'cdk-selection-list-example',
109
templateUrl: 'cdk-selection-list-example.html',
1110
})
12-
export class CdkSelectionListExample implements OnDestroy {
13-
private readonly _destroyed = new ReplaySubject(1);
14-
11+
export class CdkSelectionListExample {
1512
data = ELEMENT_NAMES;
16-
1713
selected1: string[] = [];
1814
selected2: string[] = [];
1915
selected3: string[] = [];
2016
selected4: string[] = [];
2117

22-
ngOnDestroy() {
23-
this._destroyed.next();
24-
this._destroyed.complete();
25-
}
26-
2718
getCurrentSelected(event: SelectionChange<string>) {
2819
return event.after.map((select) => select.value);
2920
}
3021

31-
trackByFn(index: number, value: string) {
22+
trackByFn(index: number) {
3223
return index;
3324
}
3425

src/components-examples/material-experimental/selection/mat-selection-column/mat-selection-column-example.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import {Component, OnDestroy} from '@angular/core';
1+
import {Component} from '@angular/core';
22
import {SelectionChange} from '@angular/material-experimental/selection';
3-
import {ReplaySubject} from 'rxjs';
43

54
/**
65
* @title Table that uses `matSelectionColumn` which allows users to select rows.
@@ -10,18 +9,11 @@ import {ReplaySubject} from 'rxjs';
109
templateUrl: 'mat-selection-column-example.html',
1110
styleUrls: ['mat-selection-column-example.css'],
1211
})
13-
export class MatSelectionColumnExample implements OnDestroy {
14-
private readonly _destroyed = new ReplaySubject(1);
15-
12+
export class MatSelectionColumnExample {
1613
displayedColumns: string[] = ['select', 'position', 'name', 'weight', 'symbol'];
1714
dataSource = ELEMENT_DATA;
1815
selected: string[] = [];
1916

20-
ngOnDestroy() {
21-
this._destroyed.next();
22-
this._destroyed.complete();
23-
}
24-
2517
selectionChanged(event: SelectionChange<PeriodicElement>) {
2618
this.selected = event.after.map((select) => select.value.name);
2719
}

src/components-examples/material-experimental/selection/mat-selection-list/mat-selection-list-example.ts

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {SelectionChange} from '@angular/cdk-experimental/selection';
2-
import {Component, OnDestroy} from '@angular/core';
3-
import {ReplaySubject} from 'rxjs';
2+
import {Component} from '@angular/core';
43

54
/**
65
* @title Mat Selection on a simple list.
@@ -9,21 +8,13 @@ import {ReplaySubject} from 'rxjs';
98
selector: 'mat-selection-list-example',
109
templateUrl: 'mat-selection-list-example.html',
1110
})
12-
export class MatSelectionListExample implements OnDestroy {
13-
private readonly _destroyed = new ReplaySubject(1);
14-
11+
export class MatSelectionListExample {
1512
data = ELEMENT_NAMES;
16-
1713
selected1: string[] = [];
1814
selected2: string[] = [];
1915
selected3: string[] = [];
2016
selected4: string[] = [];
2117

22-
ngOnDestroy() {
23-
this._destroyed.next();
24-
this._destroyed.complete();
25-
}
26-
2718
getCurrentSelected(event: SelectionChange<string>) {
2819
return event.after.map((select) => select.value);
2920
}

src/material/datepicker/datepicker-toggle.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {
2323
ViewChild,
2424
} from '@angular/core';
2525
import {MatButton} from '@angular/material/button';
26-
import {merge, of as observableOf, Subscription} from 'rxjs';
26+
import {merge, Observable, of as observableOf, Subscription} from 'rxjs';
2727
import {MatDatepickerIntl} from './datepicker-intl';
2828
import {MatDatepickerControl, MatDatepickerPanel} from './datepicker-base';
2929

@@ -132,7 +132,7 @@ export class MatDatepickerToggle<D> implements AfterContentInit, OnChanges, OnDe
132132
this._stateChanges.unsubscribe();
133133
this._stateChanges = merge(
134134
this._intl.changes,
135-
datepickerStateChanged,
135+
datepickerStateChanged as Observable<void>,
136136
inputStateChanged,
137137
datepickerToggled
138138
).subscribe(() => this._changeDetectorRef.markForCheck());

src/material/menu/menu-trigger.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import {
3939
ViewContainerRef,
4040
} from '@angular/core';
4141
import {normalizePassiveListenerOptions} from '@angular/cdk/platform';
42-
import {asapScheduler, merge, of as observableOf, Subscription} from 'rxjs';
42+
import {asapScheduler, merge, Observable, of as observableOf, Subscription} from 'rxjs';
4343
import {delay, filter, take, takeUntil} from 'rxjs/operators';
4444
import {MenuCloseReason, _MatMenuBase} from './menu';
4545
import {throwMatMenuMissingError, throwMatMenuRecursiveError} from './menu-errors';
@@ -504,7 +504,7 @@ export class MatMenuTrigger implements AfterContentInit, OnDestroy {
504504
filter(() => this._menuOpen)
505505
) : observableOf();
506506

507-
return merge(backdrop, parentClose, hover, detachments);
507+
return merge(backdrop, parentClose as Observable<MenuCloseReason>, hover, detachments);
508508
}
509509

510510
/** Handles mouse presses on the trigger. */

src/material/menu/menu.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,8 +277,8 @@ export class _MatMenuBase implements AfterContentInit, MatMenuPanel<MatMenuItem>
277277
// is internal and we know that it gets completed on destroy.
278278
this._directDescendantItems.changes.pipe(
279279
startWith(this._directDescendantItems),
280-
switchMap(items => merge<MatMenuItem>(...items.map((item: MatMenuItem) => item._focused)))
281-
).subscribe(focusedItem => this._keyManager.updateActiveItem(focusedItem));
280+
switchMap(items => merge(...items.map((item: MatMenuItem) => item._focused)))
281+
).subscribe(focusedItem => this._keyManager.updateActiveItem(focusedItem as MatMenuItem));
282282
}
283283

284284
ngOnDestroy() {

src/material/tabs/paginated-tab-header.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ export abstract class MatPaginatedTabHeader implements AfterContentChecked, Afte
180180
}
181181

182182
ngAfterContentInit() {
183-
const dirChange = this._dir ? this._dir.change : observableOf(null);
183+
const dirChange = this._dir ? this._dir.change : observableOf('ltr');
184184
const resize = this._viewportRuler.change(150);
185185
const realign = () => {
186186
this.updatePagination();

src/material/tree/data-source/nested-data-source.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,8 @@ export class MatTreeNestedDataSource<T> extends DataSource<T> {
2626
private readonly _data = new BehaviorSubject<T[]>([]);
2727

2828
connect(collectionViewer: CollectionViewer): Observable<T[]> {
29-
return merge(...[collectionViewer.viewChange, this._data])
30-
.pipe(map(() => {
31-
return this.data;
32-
}));
29+
return merge(...[collectionViewer.viewChange, this._data] as Observable<unknown>[])
30+
.pipe(map(() => this.data));
3331
}
3432

3533
disconnect() {

0 commit comments

Comments
 (0)