Skip to content
This repository was archived by the owner on Jan 6, 2025. It is now read-only.

Commit f19bff2

Browse files
fix(observableMedia): consistently emit initial value
1 parent 3602f7b commit f19bff2

File tree

5 files changed

+26
-19
lines changed

5 files changed

+26
-19
lines changed

src/demo-app/app/docs-layout-responsive/responsiveRowColumns.demo.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import {ObservableMedia} from '@angular/flex-layout';
3737
</div>
3838
</div>
3939
</mat-card-content>
40-
<mat-card-footer style="width:95%">
40+
<mat-card-footer style="width:95%; font-size: 0.9em; padding-left: 25px;">
4141
<div fxLayout="row" class="hint" fxLayoutAlign="space-around">
4242
<div>&lt;div fxLayout="{{ firstCol }}" fxFlex="50%" fxFlex.gt-sm="25%" fxHide.md &gt;
4343
</div>
+9-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Component} from '@angular/core';
1+
import {ChangeDetectionStrategy, Component} from '@angular/core';
22

33
import {MediaChange} from '@angular/flex-layout';
44
import {ObservableMedia} from '@angular/flex-layout';
@@ -8,13 +8,13 @@ import {Observable} from 'rxjs/Observable';
88
moduleId: module.id,
99
selector : 'media-query-status',
1010
template : `
11-
<div class="mqInfo" *ngIf="change$ | async as change">
12-
<span title="Active MediaQuery">{{ buildMQInfo(change) }}</span>
11+
<div class="mqInfo" *ngIf="media$ | async as event">
12+
<span title="Active MediaQuery">{{ extractQuery(event) }}</span>
1313
</div>
1414
`,
1515
styles: [
1616
` .mqInfo {
17-
padding-left: 5px;
17+
padding-left: 25px;
1818
margin-bottom: 5px;
1919
margin-top: 10px;
2020
}`,
@@ -26,18 +26,16 @@ import {Observable} from 'rxjs/Observable';
2626
` .mqInfo > span:before {
2727
content: attr(title) ': ';
2828
}`
29-
]
29+
],
30+
changeDetection : ChangeDetectionStrategy.OnPush
3031
})
3132
export class MediaQueryStatus {
32-
change$: Observable<MediaChange> = this.media$.asObservable();
33+
media$: Observable<MediaChange> = this.mediaService.asObservable();
3334

34-
constructor(private media$: ObservableMedia) {
35+
constructor(private mediaService: ObservableMedia) {
3536
}
3637

37-
buildMQInfo(change: MediaChange): string {
38-
if (change.mediaQuery.indexOf('orientation') > -1) {
39-
return '';
40-
}
38+
extractQuery(change: MediaChange): string {
4139
return change ? `'${change.mqAlias}' = (${change.mediaQuery})` : '';
4240
}
4341
}

src/lib/api/flexbox/flex-offset.spec.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,10 @@ describe('flex directive', () => {
5858

5959
let dom = fixture.debugElement.children[0].nativeElement;
6060
let isBox = _.hasStyle(dom, 'margin-left', '32px');
61-
let hasFlex = _.hasStyle(dom, 'flex', '1 1 auto');
61+
let hasFlex = _.hasStyle(dom, 'flex', '1 1 1e-09px') || // IE
62+
_.hasStyle(dom, 'flex', '1 1 1e-9px') || // Chrome
63+
_.hasStyle(dom, 'flex', '1 1 0.000000001px') || // Safari
64+
_.hasStyle(dom, 'flex', '1 1 0px');
6265

6366
expect(isBox).toBeTruthy();
6467
expect(hasFlex).toBe(true);

src/lib/api/flexbox/flex.spec.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,10 @@ describe('flex directive', () => {
6565

6666
let dom = fixture.debugElement.children[0].nativeElement;
6767
let isBox = _.hasStyle(dom, 'box-sizing', 'border-box');
68-
let hasFlex = _.hasStyle(dom, 'flex', '1 1 auto');
68+
let hasFlex = _.hasStyle(dom, 'flex', '1 1 1e-09px') || // IE
69+
_.hasStyle(dom, 'flex', '1 1 1e-9px') || // Chrome
70+
_.hasStyle(dom, 'flex', '1 1 0.000000001px') || // Safari
71+
_.hasStyle(dom, 'flex', '1 1 0px');
6972

7073
expect(isBox).toBeTruthy();
7174
expect(hasFlex).toBeTruthy();

src/lib/media-query/observable-media.ts

+8-5
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ export class MediaService implements ObservableMedia {
136136
*/
137137
private _buildObservable() {
138138
const self = this;
139+
const media$ = this.mediaWatcher.observe();
139140
const activationsOnly = (change: MediaChange) => {
140141
return change.matches === true;
141142
};
@@ -152,14 +153,16 @@ export class MediaService implements ObservableMedia {
152153
* Inject associated (if any) alias information into the MediaChange event
153154
* Exclude mediaQuery activations for overlapping mQs. List bounded mQ ranges only
154155
*/
155-
return filter.call(
156-
map.call(
156+
return map.call(
157+
filter.call(
157158
filter.call(
158-
this.mediaWatcher.observe(),
159+
media$,
159160
activationsOnly
160161
),
161-
addAliasInformation),
162-
excludeOverlaps);
162+
excludeOverlaps
163+
),
164+
addAliasInformation
165+
);
163166
}
164167

165168
/**

0 commit comments

Comments
 (0)