Skip to content

Commit 422d102

Browse files
crisbetojosephperrott
authored andcommitted
fix(overlay): error when rendering flexible overlay on the server (#11072)
1 parent 294ba3c commit 422d102

File tree

3 files changed

+19
-9
lines changed

3 files changed

+19
-9
lines changed

src/cdk/overlay/position/connected-position-strategy.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
} from './connected-position';
2020
import {FlexibleConnectedPositionStrategy} from './flexible-connected-position-strategy';
2121
import {PositionStrategy} from './position-strategy';
22+
import {Platform} from '@angular/cdk/platform';
2223

2324

2425
/**
@@ -60,14 +61,16 @@ export class ConnectedPositionStrategy implements PositionStrategy {
6061
overlayPos: OverlayConnectionPosition,
6162
connectedTo: ElementRef,
6263
viewportRuler: ViewportRuler,
63-
document: Document) {
64+
document: Document,
65+
// @deletion-target 7.0.0 `platform` parameter to be made required.
66+
platform?: Platform) {
6467

6568
// Since the `ConnectedPositionStrategy` is deprecated and we don't want to maintain
6669
// the extra logic, we create an instance of the positioning strategy that has some
6770
// defaults that make it behave as the old position strategy and to which we'll
6871
// proxy all of the API calls.
6972
this._positionStrategy =
70-
new FlexibleConnectedPositionStrategy(connectedTo, viewportRuler, document)
73+
new FlexibleConnectedPositionStrategy(connectedTo, viewportRuler, document, platform)
7174
.withFlexibleDimensions(false)
7275
.withPush(false)
7376
.withViewportMargin(0);

src/cdk/overlay/position/flexible-connected-position-strategy.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {Observable, Subscription, Subject} from 'rxjs';
2020
import {OverlayRef} from '../overlay-ref';
2121
import {isElementScrolledOutsideView, isElementClippedByScrolling} from './scroll-clip';
2222
import {coerceCssPixelValue} from '@angular/cdk/coercion';
23+
import {Platform} from '@angular/cdk/platform';
2324

2425

2526
// TODO: refactor clipping detection into a separate thing (part of scrolling module)
@@ -119,7 +120,9 @@ export class FlexibleConnectedPositionStrategy implements PositionStrategy {
119120
constructor(
120121
private _connectedTo: ElementRef,
121122
private _viewportRuler: ViewportRuler,
122-
private _document: Document) {
123+
private _document: Document,
124+
// @deletion-target 7.0.0 `_platform` parameter to be made required.
125+
private _platform?: Platform) {
123126
this._origin = this._connectedTo.nativeElement;
124127
}
125128

@@ -155,8 +158,8 @@ export class FlexibleConnectedPositionStrategy implements PositionStrategy {
155158
* @docs-private
156159
*/
157160
apply(): void {
158-
// We shouldn't do anything if the strategy was disposed.
159-
if (this._isDisposed) {
161+
// We shouldn't do anything if the strategy was disposed or we're on the server.
162+
if (this._isDisposed || (this._platform && !this._platform.isBrowser)) {
160163
return;
161164
}
162165

@@ -285,7 +288,7 @@ export class FlexibleConnectedPositionStrategy implements PositionStrategy {
285288
* allows one to re-align the panel without changing the orientation of the panel.
286289
*/
287290
reapplyLastPosition(): void {
288-
if (!this._isDisposed) {
291+
if (!this._isDisposed && (!this._platform || this._platform.isBrowser)) {
289292
this._originRect = this._origin.getBoundingClientRect();
290293
this._overlayRect = this._pane.getBoundingClientRect();
291294
this._viewportRect = this._getNarrowedViewportRect();

src/cdk/overlay/position/overlay-position-builder.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,22 @@
88

99
import {ViewportRuler} from '@angular/cdk/scrolling';
1010
import {DOCUMENT} from '@angular/common';
11-
import {ElementRef, Inject, Injectable} from '@angular/core';
11+
import {ElementRef, Inject, Injectable, Optional} from '@angular/core';
1212
import {OriginConnectionPosition, OverlayConnectionPosition} from './connected-position';
1313
import {ConnectedPositionStrategy} from './connected-position-strategy';
1414
import {FlexibleConnectedPositionStrategy} from './flexible-connected-position-strategy';
1515
import {GlobalPositionStrategy} from './global-position-strategy';
16+
import {Platform} from '@angular/cdk/platform';
1617

1718

1819
/** Builder for overlay position strategy. */
1920
@Injectable({providedIn: 'root'})
2021
export class OverlayPositionBuilder {
2122
constructor(
2223
private _viewportRuler: ViewportRuler,
23-
@Inject(DOCUMENT) private _document: any) { }
24+
@Inject(DOCUMENT) private _document: any,
25+
// @deletion-target 7.0.0 `_platform` parameter to be made required.
26+
@Optional() private _platform?: Platform) { }
2427

2528
/**
2629
* Creates a global position strategy.
@@ -51,7 +54,8 @@ export class OverlayPositionBuilder {
5154
* @param elementRef
5255
*/
5356
flexibleConnectedTo(elementRef: ElementRef): FlexibleConnectedPositionStrategy {
54-
return new FlexibleConnectedPositionStrategy(elementRef, this._viewportRuler, this._document);
57+
return new FlexibleConnectedPositionStrategy(elementRef, this._viewportRuler, this._document,
58+
this._platform);
5559
}
5660

5761
}

0 commit comments

Comments
 (0)