Skip to content

Commit fa4ddd0

Browse files
rafaelss95jelbourn
authored andcommitted
chore: make all event emitters / subjects readonly (#9586)
1 parent 9fed87c commit fa4ddd0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+109
-102
lines changed

src/lib/autocomplete/autocomplete-trigger.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export class MatAutocompleteTrigger implements ControlValueAccessor, OnDestroy {
131131
private _closingActionsSubscription: Subscription;
132132

133133
/** Stream of keyboard events that can close the panel. */
134-
private _closeKeyEventStream = new Subject<void>();
134+
private readonly _closeKeyEventStream = new Subject<void>();
135135

136136
/** View -> model callback called when value changes */
137137
_onChange: (value: any) => void = () => {};
@@ -209,7 +209,7 @@ export class MatAutocompleteTrigger implements ControlValueAccessor, OnDestroy {
209209
}
210210

211211
/** Stream of autocomplete option selections. */
212-
optionSelections: Observable<MatOptionSelectionChange> = defer(() => {
212+
readonly optionSelections: Observable<MatOptionSelectionChange> = defer(() => {
213213
if (this.autocomplete && this.autocomplete.options) {
214214
return merge(...this.autocomplete.options.map(option => option.onSelectionChange));
215215
}

src/lib/autocomplete/autocomplete.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export class MatAutocomplete extends _MatAutocompleteMixinBase implements AfterC
9999
@Input() displayWith: ((value: any) => string) | null = null;
100100

101101
/** Event that is emitted whenever an option from the list is selected. */
102-
@Output() optionSelected: EventEmitter<MatAutocompleteSelectedEvent> =
102+
@Output() readonly optionSelected: EventEmitter<MatAutocompleteSelectedEvent> =
103103
new EventEmitter<MatAutocompleteSelectedEvent>();
104104

105105
/**

src/lib/button-toggle/button-toggle.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ export class MatButtonToggleGroup extends _MatButtonToggleGroupMixinBase
127127
* Used to facilitate two-way data binding.
128128
* @docs-private
129129
*/
130-
@Output() valueChange = new EventEmitter<any>();
130+
@Output() readonly valueChange = new EventEmitter<any>();
131131

132132
/** Whether the toggle group is selected. */
133133
@Input()
@@ -142,7 +142,8 @@ export class MatButtonToggleGroup extends _MatButtonToggleGroupMixinBase
142142
}
143143

144144
/** Event emitted when the group's value changes. */
145-
@Output() change: EventEmitter<MatButtonToggleChange> = new EventEmitter<MatButtonToggleChange>();
145+
@Output() readonly change: EventEmitter<MatButtonToggleChange> =
146+
new EventEmitter<MatButtonToggleChange>();
146147

147148
constructor(private _changeDetector: ChangeDetectorRef) {
148149
super();
@@ -357,7 +358,8 @@ export class MatButtonToggle implements OnInit, OnDestroy {
357358
}
358359

359360
/** Event emitted when the group value changes. */
360-
@Output() change: EventEmitter<MatButtonToggleChange> = new EventEmitter<MatButtonToggleChange>();
361+
@Output() readonly change: EventEmitter<MatButtonToggleChange> =
362+
new EventEmitter<MatButtonToggleChange>();
361363

362364
constructor(@Optional() toggleGroup: MatButtonToggleGroup,
363365
@Optional() toggleGroupMultiple: MatButtonToggleGroupMultiple,

src/lib/checkbox/checkbox.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,11 @@ export class MatCheckbox extends _MatCheckboxMixinBase implements ControlValueAc
166166
@Input() name: string | null = null;
167167

168168
/** Event emitted when the checkbox's `checked` value changes. */
169-
@Output() change: EventEmitter<MatCheckboxChange> = new EventEmitter<MatCheckboxChange>();
169+
@Output() readonly change: EventEmitter<MatCheckboxChange> =
170+
new EventEmitter<MatCheckboxChange>();
170171

171172
/** Event emitted when the checkbox's `indeterminate` value changes. */
172-
@Output() indeterminateChange: EventEmitter<boolean> = new EventEmitter<boolean>();
173+
@Output() readonly indeterminateChange: EventEmitter<boolean> = new EventEmitter<boolean>();
173174

174175
/** The value attribute of the native input element */
175176
@Input() value: string;

src/lib/chips/chip-list.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,14 +305,15 @@ export class MatChipList extends _MatChipListMixinBase implements MatFormFieldCo
305305
}
306306

307307
/** Event emitted when the selected chip list value has been changed by the user. */
308-
@Output() change: EventEmitter<MatChipListChange> = new EventEmitter<MatChipListChange>();
308+
@Output() readonly change: EventEmitter<MatChipListChange> =
309+
new EventEmitter<MatChipListChange>();
309310

310311
/**
311312
* Event that emits whenever the raw value of the chip-list changes. This is here primarily
312313
* to facilitate the two-way binding for the `value` input.
313314
* @docs-private
314315
*/
315-
@Output() valueChange: EventEmitter<any> = new EventEmitter<any>();
316+
@Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();
316317

317318
/** The chip components contained within this chip list. */
318319
@ContentChildren(MatChip) chips: QueryList<MatChip>;

src/lib/chips/chip.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -137,27 +137,27 @@ export class MatChip extends _MatChipMixinBase implements FocusableOption, OnDes
137137
}
138138

139139
/** Emits when the chip is focused. */
140-
_onFocus = new Subject<MatChipEvent>();
140+
readonly _onFocus = new Subject<MatChipEvent>();
141141

142142
/** Emits when the chip is blured. */
143-
_onBlur = new Subject<MatChipEvent>();
143+
readonly _onBlur = new Subject<MatChipEvent>();
144144

145145
/** Emitted when the chip is selected or deselected. */
146-
@Output() selectionChange: EventEmitter<MatChipSelectionChange>
147-
= new EventEmitter<MatChipSelectionChange>();
146+
@Output() readonly selectionChange: EventEmitter<MatChipSelectionChange> =
147+
new EventEmitter<MatChipSelectionChange>();
148148

149149
/** Emitted when the chip is destroyed. */
150-
@Output() destroyed = new EventEmitter<MatChipEvent>();
150+
@Output() readonly destroyed = new EventEmitter<MatChipEvent>();
151151

152152
/**
153153
* Emitted when the chip is destroyed.
154154
* @deprecated Use 'destroyed' instead.
155155
* @deletion-target 6.0.0
156156
*/
157-
@Output() destroy: EventEmitter<MatChipEvent> = this.destroyed;
157+
@Output() readonly destroy: EventEmitter<MatChipEvent> = this.destroyed;
158158

159159
/** Emitted when a chip is to be removed. */
160-
@Output() removed: EventEmitter<MatChipEvent> = new EventEmitter<MatChipEvent>();
160+
@Output() readonly removed: EventEmitter<MatChipEvent> = new EventEmitter<MatChipEvent>();
161161

162162
/**
163163
* Emitted when a chip is to be removed.

src/lib/core/common-behaviors/error-state.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {Subject} from 'rxjs/Subject';
1414
/** @docs-private */
1515
export interface CanUpdateErrorState {
1616
updateErrorState();
17-
stateChanges: Subject<void>;
17+
readonly stateChanges: Subject<void>;
1818
errorState: boolean;
1919
errorStateMatcher: ErrorStateMatcher;
2020
}
@@ -41,7 +41,7 @@ export function mixinErrorState<T extends Constructor<HasErrorState>>(base: T)
4141
* Stream that emits whenever the state of the input changes such that the wrapping
4242
* `MatFormField needs to run change detection.
4343
*/
44-
stateChanges = new Subject<void>();
44+
readonly stateChanges = new Subject<void>();
4545

4646
errorStateMatcher: ErrorStateMatcher;
4747

src/lib/core/option/option.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@ export class MatOption implements AfterViewChecked {
112112
get disableRipple() { return this._parent && this._parent.disableRipple; }
113113

114114
/** Event emitted when the option is selected or deselected. */
115-
@Output() onSelectionChange = new EventEmitter<MatOptionSelectionChange>();
115+
@Output() readonly onSelectionChange = new EventEmitter<MatOptionSelectionChange>();
116116

117117
/** Emits when the state of the option changes and any parents have to be notified. */
118-
_stateChanges = new Subject<void>();
118+
readonly _stateChanges = new Subject<void>();
119119

120120
constructor(
121121
private _element: ElementRef,

src/lib/datepicker/calendar-body.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export class MatCalendarBody {
7979
@Input() cellAspectRatio = 1;
8080

8181
/** Emits when a new value is selected. */
82-
@Output() selectedValueChange = new EventEmitter<number>();
82+
@Output() readonly selectedValueChange = new EventEmitter<number>();
8383

8484
_cellClicked(cell: MatCalendarCell): void {
8585
if (!this.allowDisabledSelection && !cell.enabled) {

src/lib/datepicker/calendar.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,10 @@ export class MatCalendar<D> implements AfterContentInit, OnDestroy, OnChanges {
105105
@Input() dateFilter: (date: D) => boolean;
106106

107107
/** Emits when the currently selected date changes. */
108-
@Output() selectedChange = new EventEmitter<D>();
108+
@Output() readonly selectedChange = new EventEmitter<D>();
109109

110110
/** Emits when any date is selected. */
111-
@Output() _userSelection = new EventEmitter<void>();
111+
@Output() readonly _userSelection = new EventEmitter<void>();
112112

113113
/** Reference to the current month view component. */
114114
@ViewChild(MatMonthView) monthView: MatMonthView<D>;

src/lib/datepicker/datepicker-input.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,12 @@ export class MatDatepickerInput<D> implements AfterContentInit, ControlValueAcce
165165
private _disabled: boolean;
166166

167167
/** Emits when a `change` event is fired on this `<input>`. */
168-
@Output() dateChange: EventEmitter<MatDatepickerInputEvent<D>>
169-
= new EventEmitter<MatDatepickerInputEvent<D>>();
168+
@Output() readonly dateChange: EventEmitter<MatDatepickerInputEvent<D>> =
169+
new EventEmitter<MatDatepickerInputEvent<D>>();
170170

171171
/** Emits when an `input` event is fired on this `<input>`. */
172-
@Output() dateInput: EventEmitter<MatDatepickerInputEvent<D>>
173-
= new EventEmitter<MatDatepickerInputEvent<D>>();
172+
@Output() readonly dateInput: EventEmitter<MatDatepickerInputEvent<D>> =
173+
new EventEmitter<MatDatepickerInputEvent<D>>();
174174

175175
/** Emits when the value changes (either due to user input or programmatic change). */
176176
_valueChange = new EventEmitter<D|null>();

src/lib/datepicker/datepicker-intl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export class MatDatepickerIntl {
1717
* Stream that emits whenever the labels here are changed. Use this to notify
1818
* components if the labels have changed after initialization.
1919
*/
20-
changes: Subject<void> = new Subject<void>();
20+
readonly changes: Subject<void> = new Subject<void>();
2121

2222
/** A label for the calendar popup (used by screen readers). */
2323
calendarLabel = 'Calendar';

src/lib/datepicker/datepicker.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ export class MatDatepicker<D> implements OnDestroy {
162162
* @deprecated Switch to the `dateChange` and `dateInput` binding on the input element.
163163
* @deletion-target 6.0.0
164164
*/
165-
@Output() selectedChanged: EventEmitter<D> = new EventEmitter<D>();
165+
@Output() readonly selectedChanged: EventEmitter<D> = new EventEmitter<D>();
166166

167167
/** Classes to be passed to the date picker panel. Supports the same syntax as `ngClass`. */
168168
@Input() panelClass: string | string[];
@@ -219,7 +219,7 @@ export class MatDatepicker<D> implements OnDestroy {
219219
_datepickerInput: MatDatepickerInput<D>;
220220

221221
/** Emits when the datepicker is disabled. */
222-
_disabledChange = new Subject<boolean>();
222+
readonly _disabledChange = new Subject<boolean>();
223223

224224
constructor(private _dialog: MatDialog,
225225
private _overlay: Overlay,

src/lib/datepicker/month-view.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ export class MatMonthView<D> implements AfterContentInit {
6868
@Input() dateFilter: (date: D) => boolean;
6969

7070
/** Emits when a new date is selected. */
71-
@Output() selectedChange = new EventEmitter<D | null>();
71+
@Output() readonly selectedChange = new EventEmitter<D | null>();
7272

7373
/** Emits when any date is selected. */
74-
@Output() _userSelection = new EventEmitter<void>();
74+
@Output() readonly _userSelection = new EventEmitter<void>();
7575

7676
/** The label for this month (e.g. "January 2017"). */
7777
_monthLabel: string;

src/lib/datepicker/multi-year-view.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export class MatMultiYearView<D> implements AfterContentInit {
6868
@Input() dateFilter: (date: D) => boolean;
6969

7070
/** Emits when a new month is selected. */
71-
@Output() selectedChange = new EventEmitter<D>();
71+
@Output() readonly selectedChange = new EventEmitter<D>();
7272

7373
/** Grid of calendar cells representing the currently displayed years. */
7474
_years: MatCalendarCell[][];

src/lib/datepicker/year-view.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export class MatYearView<D> implements AfterContentInit {
6363
@Input() dateFilter: (date: D) => boolean;
6464

6565
/** Emits when a new month is selected. */
66-
@Output() selectedChange = new EventEmitter<D>();
66+
@Output() readonly selectedChange = new EventEmitter<D>();
6767

6868
/** Grid of calendar cells representing the months of the year. */
6969
_months: MatCalendarCell[][];

src/lib/dialog/dialog-ref.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ export class MatDialogRef<T, R = any> {
3434
disableClose: boolean | undefined = this._containerInstance._config.disableClose;
3535

3636
/** Subject for notifying the user that the dialog has finished opening. */
37-
private _afterOpen = new Subject<void>();
37+
private readonly _afterOpen = new Subject<void>();
3838

3939
/** Subject for notifying the user that the dialog has finished closing. */
40-
private _afterClosed = new Subject<R | undefined>();
40+
private readonly _afterClosed = new Subject<R | undefined>();
4141

4242
/** Subject for notifying the user that the dialog has started closing. */
43-
private _beforeClose = new Subject<R | undefined>();
43+
private readonly _beforeClose = new Subject<R | undefined>();
4444

4545
/** Result to be passed to afterClosed. */
4646
private _result: R | undefined;

src/lib/dialog/dialog.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ export const MAT_DIALOG_SCROLL_STRATEGY_PROVIDER = {
6666
@Injectable()
6767
export class MatDialog {
6868
private _openDialogsAtThisLevel: MatDialogRef<any>[] = [];
69-
private _afterAllClosedAtThisLevel = new Subject<void>();
70-
private _afterOpenAtThisLevel = new Subject<MatDialogRef<any>>();
69+
private readonly _afterAllClosedAtThisLevel = new Subject<void>();
70+
private readonly _afterOpenAtThisLevel = new Subject<MatDialogRef<any>>();
7171
private _ariaHiddenElements = new Map<Element, string|null>();
7272

7373
/** Keeps track of the currently-open dialogs. */
@@ -89,7 +89,7 @@ export class MatDialog {
8989
* Stream that emits when all open dialog have finished closing.
9090
* Will emit on subscribe if there are no open dialogs to begin with.
9191
*/
92-
afterAllClosed: Observable<void> = defer<void>(() => this.openDialogs.length ?
92+
readonly afterAllClosed: Observable<void> = defer<void>(() => this.openDialogs.length ?
9393
this._afterAllClosed :
9494
this._afterAllClosed.pipe(startWith(undefined)));
9595

src/lib/expansion/expansion-panel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export class MatExpansionPanel extends _MatExpansionPanelMixinBase
9999
private _hideToggle = false;
100100

101101
/** Stream that emits for changes in `@Input` properties. */
102-
_inputChanges = new Subject<SimpleChanges>();
102+
readonly _inputChanges = new Subject<SimpleChanges>();
103103

104104
/** Optionally defined accordion the expansion panel belongs to. */
105105
accordion: MatAccordion;

src/lib/input/autosize.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import {Subject} from 'rxjs/Subject';
3838
export class MatTextareaAutosize implements AfterViewInit, DoCheck, OnDestroy {
3939
/** Keep track of the previous textarea value to avoid resizing when the value hasn't changed. */
4040
private _previousValue: string;
41-
private _destroyed = new Subject<void>();
41+
private readonly _destroyed = new Subject<void>();
4242

4343
private _minRows: number;
4444
private _maxRows: number;

src/lib/input/input.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ export class MatInput extends _MatInputMixinBase implements MatFormFieldControl<
100100
* Stream that emits whenever the state of the input changes such that the wrapping `MatFormField`
101101
* needs to run change detection.
102102
*/
103-
stateChanges = new Subject<void>();
103+
readonly stateChanges = new Subject<void>();
104104

105105
/** A name for this control that can be used by `mat-form-field`. */
106106
controlType = 'mat-input';

src/lib/list/selection-list.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ export class MatListOption extends _MatListOptionMixinBase
158158
* @deprecated Use the `selectionChange` event on the `<mat-selection-list>` instead.
159159
* @deletion-target 6.0.0
160160
*/
161-
@Output() selectionChange: EventEmitter<MatListOptionChange> =
161+
@Output() readonly selectionChange: EventEmitter<MatListOptionChange> =
162162
new EventEmitter<MatListOptionChange>();
163163

164164
constructor(private _element: ElementRef,
@@ -301,7 +301,7 @@ export class MatSelectionList extends _MatSelectionListMixinBase implements Focu
301301
@ContentChildren(MatListOption) options: QueryList<MatListOption>;
302302

303303
/** Emits a change event whenever the selected state of an option changes. */
304-
@Output() selectionChange: EventEmitter<MatSelectionListChange> =
304+
@Output() readonly selectionChange: EventEmitter<MatSelectionListChange> =
305305
new EventEmitter<MatSelectionListChange>();
306306

307307
/** The currently selected options. */

src/lib/menu/menu-directive.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,8 @@ export class MatMenu implements AfterContentInit, MatMenuPanel, OnDestroy {
176176
set classList(classes: string) { this.panelClass = classes; }
177177

178178
/** Event emitted when the menu is closed. */
179-
@Output() closed: EventEmitter<void | 'click' | 'keydown'>
180-
= new EventEmitter<void | 'click' | 'keydown'>();
179+
@Output() readonly closed: EventEmitter<void | 'click' | 'keydown'> =
180+
new EventEmitter<void | 'click' | 'keydown'>();
181181

182182
/**
183183
* Event emitted when the menu is closed.

src/lib/menu/menu-item.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export class MatMenuItem extends _MatMenuItemMixinBase
6060
private _document: Document;
6161

6262
/** Stream that emits when the menu item is hovered. */
63-
_hovered: Subject<MatMenuItem> = new Subject<MatMenuItem>();
63+
readonly _hovered: Subject<MatMenuItem> = new Subject<MatMenuItem>();
6464

6565
/** Whether the menu item is highlighted. */
6666
_highlighted: boolean = false;

src/lib/menu/menu-trigger.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,24 +114,24 @@ export class MatMenuTrigger implements AfterContentInit, OnDestroy {
114114
@Input('matMenuTriggerData') menuData: any;
115115

116116
/** Event emitted when the associated menu is opened. */
117-
@Output() menuOpened: EventEmitter<void> = new EventEmitter<void>();
117+
@Output() readonly menuOpened: EventEmitter<void> = new EventEmitter<void>();
118118

119119
/**
120120
* Event emitted when the associated menu is opened.
121121
* @deprecated Switch to `menuOpened` instead
122122
* @deletion-target 6.0.0
123123
*/
124-
@Output() onMenuOpen: EventEmitter<void> = this.menuOpened;
124+
@Output() readonly onMenuOpen: EventEmitter<void> = this.menuOpened;
125125

126126
/** Event emitted when the associated menu is closed. */
127-
@Output() menuClosed: EventEmitter<void> = new EventEmitter<void>();
127+
@Output() readonly menuClosed: EventEmitter<void> = new EventEmitter<void>();
128128

129129
/**
130130
* Event emitted when the associated menu is closed.
131131
* @deprecated Switch to `menuClosed` instead
132132
* @deletion-target 6.0.0
133133
*/
134-
@Output() onMenuClose: EventEmitter<void> = this.menuClosed;
134+
@Output() readonly onMenuClose: EventEmitter<void> = this.menuClosed;
135135

136136
constructor(private _overlay: Overlay,
137137
private _element: ElementRef,

src/lib/paginator/paginator-intl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export class MatPaginatorIntl {
1919
* Stream that emits whenever the labels here are changed. Use this to notify
2020
* components if the labels have changed after initialization.
2121
*/
22-
changes: Subject<void> = new Subject<void>();
22+
readonly changes: Subject<void> = new Subject<void>();
2323

2424
/** A label for the page size selector. */
2525
itemsPerPageLabel: string = 'Items per page:';

src/lib/paginator/paginator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export class MatPaginator implements OnInit, OnDestroy {
101101
@Input() hidePageSize = false;
102102

103103
/** Event emitted when the paginator changes the page size or page index. */
104-
@Output() page = new EventEmitter<PageEvent>();
104+
@Output() readonly page = new EventEmitter<PageEvent>();
105105

106106
/** Displayed set of page size options. Will be sorted and include current page size. */
107107
_displayedPageSizeOptions: number[];

0 commit comments

Comments
 (0)