@@ -12,6 +12,7 @@ import {
12
12
ElementRef ,
13
13
QueryList ,
14
14
} from '@angular/core' ;
15
+ import { startWith } from 'rxjs/operators' ;
15
16
import { MatCommonModule } from '../common-behaviors/common-module' ;
16
17
17
18
@@ -30,38 +31,38 @@ export class MatLine {}
30
31
* Helper that takes a query list of lines and sets the correct class on the host.
31
32
* @docs -private
32
33
*/
33
- export class MatLineSetter {
34
- constructor ( private _lines : QueryList < MatLine > , private _element : ElementRef < HTMLElement > ) {
35
- this . _setLineClass ( this . _lines . length ) ;
36
-
37
- this . _lines . changes . subscribe ( ( ) => {
38
- this . _setLineClass ( this . _lines . length ) ;
39
- } ) ;
40
- }
34
+ export function setLines ( lines : QueryList < MatLine > , element : ElementRef < HTMLElement > ) {
35
+ // Note: doesn't need to unsubscribe, because `changes`
36
+ // gets completed by Angular when the view is destroyed.
37
+ lines . changes . pipe ( startWith < QueryList < MatLine > > ( lines ) ) . subscribe ( ( { length} ) => {
38
+ setClass ( element , 'mat-2-line' , false ) ;
39
+ setClass ( element , 'mat-3-line' , false ) ;
40
+ setClass ( element , 'mat-multi-line' , false ) ;
41
41
42
- private _setLineClass ( count : number ) : void {
43
- this . _resetClasses ( ) ;
44
- if ( count === 2 || count === 3 ) {
45
- this . _setClass ( `mat-${ count } -line` , true ) ;
46
- } else if ( count > 3 ) {
47
- this . _setClass ( `mat-multi-line` , true ) ;
42
+ if ( length === 2 || length === 3 ) {
43
+ setClass ( element , `mat-${ length } -line` , true ) ;
44
+ } else if ( length > 3 ) {
45
+ setClass ( element , `mat-multi-line` , true ) ;
48
46
}
49
- }
47
+ } ) ;
48
+ }
50
49
51
- private _resetClasses ( ) : void {
52
- this . _setClass ( 'mat-2-line' , false ) ;
53
- this . _setClass ( 'mat-3-line' , false ) ;
54
- this . _setClass ( 'mat-multi-line' , false ) ;
55
- }
50
+ /** Adds or removes a class from an element. */
51
+ function setClass ( element : ElementRef < HTMLElement > , className : string , isAdd : boolean ) : void {
52
+ const classList = element . nativeElement . classList ;
53
+ isAdd ? classList . add ( className ) : classList . remove ( className ) ;
54
+ }
56
55
57
- private _setClass ( className : string , isAdd : boolean ) : void {
58
- if ( isAdd ) {
59
- this . _element . nativeElement . classList . add ( className ) ;
60
- } else {
61
- this . _element . nativeElement . classList . remove ( className ) ;
62
- }
56
+ /**
57
+ * Helper that takes a query list of lines and sets the correct class on the host.
58
+ * @docs -private
59
+ * @deprecated Use `setLines` instead.
60
+ * @breaking -change 8.0.0
61
+ */
62
+ export class MatLineSetter {
63
+ constructor ( lines : QueryList < MatLine > , element : ElementRef < HTMLElement > ) {
64
+ setLines ( lines , element ) ;
63
65
}
64
-
65
66
}
66
67
67
68
@NgModule ( {
0 commit comments