From 7f987c6e64eb59d6310ec3a8050824a7f814df9c Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 17 Sep 2020 20:51:42 +0200 Subject: [PATCH] refactor(cdk/overlay): remove deprecated APIs for v11 Removes most of the deprecated APIs for v11 under `cdk/overlay`. Note that these changes target primarily the breaking changes that should be easier to land. I've left out removing `ConnectedPositionStrategy` which has a separate PR (#17519), and `GlobalPositionStrategy.width` and `GlobalPositionStrategy.height`, because they'll be trickier to land. BREAKING CHANGES: * The `OVERLAY_PROVIDERS` constant has been removed. Import `OverlayModule` and use the providers directly instead. * `_platform` parameter of the `OverlayContainer` constructor is now required. * `_platform` parameter of the `FullscreenOverlayContainer` constructor is now required. * `_location` and `_outsideClickDispatcher` parameters of the `OverlayRef` constructor are now required. * `_location` and `_outsideClickDispatcher` parameters of the `Overlay` constructor are now required. --- .../overlay-keyboard-dispatcher.ts | 30 +------------- .../overlay/fullscreen-overlay-container.ts | 8 +--- src/cdk/overlay/overlay-container.ts | 41 ++----------------- src/cdk/overlay/overlay-directives.ts | 7 ---- src/cdk/overlay/overlay-module.ts | 19 +-------- src/cdk/overlay/overlay-ref.ts | 31 +++----------- src/cdk/overlay/overlay.ts | 6 +-- .../ng-update/data/constructor-checks.ts | 4 ++ tools/public_api_guard/cdk/overlay.d.ts | 14 +++---- 9 files changed, 24 insertions(+), 136 deletions(-) diff --git a/src/cdk/overlay/dispatchers/overlay-keyboard-dispatcher.ts b/src/cdk/overlay/dispatchers/overlay-keyboard-dispatcher.ts index 53aeb56884e6..3b9b6369d654 100644 --- a/src/cdk/overlay/dispatchers/overlay-keyboard-dispatcher.ts +++ b/src/cdk/overlay/dispatchers/overlay-keyboard-dispatcher.ts @@ -7,13 +7,7 @@ */ import {DOCUMENT} from '@angular/common'; -import { - Inject, - Injectable, - InjectionToken, - Optional, - SkipSelf, -} from '@angular/core'; +import {Inject, Injectable} from '@angular/core'; import {OverlayReference} from '../overlay-reference'; import {BaseOverlayDispatcher} from './base-overlay-dispatcher'; @@ -67,25 +61,3 @@ export class OverlayKeyboardDispatcher extends BaseOverlayDispatcher { } } } - - -/** @docs-private @deprecated @breaking-change 8.0.0 */ -export function OVERLAY_KEYBOARD_DISPATCHER_PROVIDER_FACTORY( - dispatcher: OverlayKeyboardDispatcher, _document: any) { - return dispatcher || new OverlayKeyboardDispatcher(_document); -} - -/** @docs-private @deprecated @breaking-change 8.0.0 */ -export const OVERLAY_KEYBOARD_DISPATCHER_PROVIDER = { - // If there is already an OverlayKeyboardDispatcher available, use that. - // Otherwise, provide a new one. - provide: OverlayKeyboardDispatcher, - deps: [ - [new Optional(), new SkipSelf(), OverlayKeyboardDispatcher], - - // Coerce to `InjectionToken` so that the `deps` match the "shape" - // of the type expected by Angular - DOCUMENT as InjectionToken - ], - useFactory: OVERLAY_KEYBOARD_DISPATCHER_PROVIDER_FACTORY -}; diff --git a/src/cdk/overlay/fullscreen-overlay-container.ts b/src/cdk/overlay/fullscreen-overlay-container.ts index 55b33c8fd723..087a780f205d 100644 --- a/src/cdk/overlay/fullscreen-overlay-container.ts +++ b/src/cdk/overlay/fullscreen-overlay-container.ts @@ -24,13 +24,7 @@ export class FullscreenOverlayContainer extends OverlayContainer implements OnDe private _fullScreenEventName: string | undefined; private _fullScreenListener: () => void; - constructor( - @Inject(DOCUMENT) _document: any, - /** - * @deprecated `platform` parameter to become required. - * @breaking-change 10.0.0 - */ - platform?: Platform) { + constructor(@Inject(DOCUMENT) _document: any, platform: Platform) { super(_document, platform); } diff --git a/src/cdk/overlay/overlay-container.ts b/src/cdk/overlay/overlay-container.ts index 2e078788f146..e14ea1958408 100644 --- a/src/cdk/overlay/overlay-container.ts +++ b/src/cdk/overlay/overlay-container.ts @@ -7,14 +7,7 @@ */ import {DOCUMENT} from '@angular/common'; -import { - Inject, - Injectable, - InjectionToken, - OnDestroy, - Optional, - SkipSelf, -} from '@angular/core'; +import {Inject, Injectable, OnDestroy} from '@angular/core'; import {Platform} from '@angular/cdk/platform'; /** @@ -30,13 +23,7 @@ export class OverlayContainer implements OnDestroy { protected _containerElement: HTMLElement; protected _document: Document; - constructor( - @Inject(DOCUMENT) document: any, - /** - * @deprecated `platform` parameter to become required. - * @breaking-change 10.0.0 - */ - protected _platform?: Platform) { + constructor(@Inject(DOCUMENT) document: any, protected _platform: Platform) { this._document = document; } @@ -67,11 +54,9 @@ export class OverlayContainer implements OnDestroy { * with the 'cdk-overlay-container' class on the document body. */ protected _createContainer(): void { - // @breaking-change 10.0.0 Remove null check for `_platform`. - const isBrowser = this._platform ? this._platform.isBrowser : typeof window !== 'undefined'; const containerClass = 'cdk-overlay-container'; - if (isBrowser || isTestEnvironment) { + if (this._platform.isBrowser || isTestEnvironment) { const oppositePlatformContainers = this._document.querySelectorAll(`.${containerClass}[platform="server"], ` + `.${containerClass}[platform="test"]`); @@ -97,7 +82,7 @@ export class OverlayContainer implements OnDestroy { // TODO(crisbeto): remove the test environment check once we have an overlay testing module. if (isTestEnvironment) { container.setAttribute('platform', 'test'); - } else if (!isBrowser) { + } else if (!this._platform.isBrowser) { container.setAttribute('platform', 'server'); } @@ -105,21 +90,3 @@ export class OverlayContainer implements OnDestroy { this._containerElement = container; } } - - -/** @docs-private @deprecated @breaking-change 8.0.0 */ -export function OVERLAY_CONTAINER_PROVIDER_FACTORY(parentContainer: OverlayContainer, - _document: any) { - return parentContainer || new OverlayContainer(_document); -} - -/** @docs-private @deprecated @breaking-change 8.0.0 */ -export const OVERLAY_CONTAINER_PROVIDER = { - // If there is already an OverlayContainer available, use that. Otherwise, provide a new one. - provide: OverlayContainer, - deps: [ - [new Optional(), new SkipSelf(), OverlayContainer], - DOCUMENT as InjectionToken // We need to use the InjectionToken somewhere to keep TS happy - ], - useFactory: OVERLAY_CONTAINER_PROVIDER_FACTORY -}; diff --git a/src/cdk/overlay/overlay-directives.ts b/src/cdk/overlay/overlay-directives.ts index 888fcbdd55e4..f6c45f92e0b4 100644 --- a/src/cdk/overlay/overlay-directives.ts +++ b/src/cdk/overlay/overlay-directives.ts @@ -37,7 +37,6 @@ import { } from './position/flexible-connected-position-strategy'; import { RepositionScrollStrategy, - RepositionScrollStrategyConfig, ScrollStrategy, } from './scroll/index'; @@ -74,12 +73,6 @@ const defaultPositionList: ConnectedPosition[] = [ export const CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>('cdk-connected-overlay-scroll-strategy'); -/** @docs-private @deprecated @breaking-change 8.0.0 */ -export function CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_FACTORY(overlay: Overlay): - () => ScrollStrategy { - return (config?: RepositionScrollStrategyConfig) => overlay.scrollStrategies.reposition(config); -} - /** * Directive applied to an element to make it usable as an origin for an Overlay using a * ConnectedPositionStrategy. diff --git a/src/cdk/overlay/overlay-module.ts b/src/cdk/overlay/overlay-module.ts index 1bf2d7016ec0..0225c7889dee 100644 --- a/src/cdk/overlay/overlay-module.ts +++ b/src/cdk/overlay/overlay-module.ts @@ -9,16 +9,13 @@ import {BidiModule} from '@angular/cdk/bidi'; import {PortalModule} from '@angular/cdk/portal'; import {ScrollingModule} from '@angular/cdk/scrolling'; -import {NgModule, Provider} from '@angular/core'; -import {OVERLAY_KEYBOARD_DISPATCHER_PROVIDER} from './dispatchers/overlay-keyboard-dispatcher'; +import {NgModule} from '@angular/core'; import {Overlay} from './overlay'; -import {OVERLAY_CONTAINER_PROVIDER} from './overlay-container'; import { CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER, CdkConnectedOverlay, CdkOverlayOrigin, } from './overlay-directives'; -import {OverlayPositionBuilder} from './position/overlay-position-builder'; @NgModule({ @@ -31,17 +28,3 @@ import {OverlayPositionBuilder} from './position/overlay-position-builder'; ], }) export class OverlayModule {} - - -/** - * @deprecated Use `OverlayModule` instead. - * @breaking-change 8.0.0 - * @docs-private - */ -export const OVERLAY_PROVIDERS: Provider[] = [ - Overlay, - OverlayPositionBuilder, - OVERLAY_KEYBOARD_DISPATCHER_PROVIDER, - OVERLAY_CONTAINER_PROVIDER, - CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER, -]; diff --git a/src/cdk/overlay/overlay-ref.ts b/src/cdk/overlay/overlay-ref.ts index 5884f0ccd0b0..90d1b31f1b55 100644 --- a/src/cdk/overlay/overlay-ref.ts +++ b/src/cdk/overlay/overlay-ref.ts @@ -60,10 +60,8 @@ export class OverlayRef implements PortalOutlet, OverlayReference { private _ngZone: NgZone, private _keyboardDispatcher: OverlayKeyboardDispatcher, private _document: Document, - // @breaking-change 8.0.0 `_location` parameter to be made required. - private _location?: Location, - // @breaking-change 9.0.0 `_mouseClickDispatcher` parameter to be made required. - private _outsideClickDispatcher?: OverlayOutsideClickDispatcher) { + private _location: Location, + private _outsideClickDispatcher: OverlayOutsideClickDispatcher) { if (_config.scrollStrategy) { this._scrollStrategy = _config.scrollStrategy; @@ -152,17 +150,11 @@ export class OverlayRef implements PortalOutlet, OverlayReference { // Track this overlay by the keyboard dispatcher this._keyboardDispatcher.add(this); - // @breaking-change 8.0.0 remove the null check for `_location` - // once the constructor parameter is made required. - if (this._config.disposeOnNavigation && this._location) { + if (this._config.disposeOnNavigation) { this._locationChanges = this._location.subscribe(() => this.dispose()); } - // @breaking-change 9.0.0 remove the null check for `_mouseClickDispatcher` - if (this._outsideClickDispatcher) { - this._outsideClickDispatcher.add(this); - } - + this._outsideClickDispatcher.add(this); return attachResult; } @@ -201,15 +193,8 @@ export class OverlayRef implements PortalOutlet, OverlayReference { // Keeping the host element in the DOM can cause scroll jank, because it still gets // rendered, even though it's transparent and unclickable which is why we remove it. this._detachContentWhenStable(); - - // Stop listening for location changes. this._locationChanges.unsubscribe(); - - // @breaking-change 9.0.0 remove the null check for `_outsideClickDispatcher` - if (this._outsideClickDispatcher) { - this._outsideClickDispatcher.remove(this); - } - + this._outsideClickDispatcher.remove(this); return detachmentResult; } @@ -230,11 +215,7 @@ export class OverlayRef implements PortalOutlet, OverlayReference { this._backdropClick.complete(); this._keydownEvents.complete(); this._outsidePointerEvents.complete(); - - // @breaking-change 9.0.0 remove the null check for `_outsideClickDispatcher` - if (this._outsideClickDispatcher) { - this._outsideClickDispatcher.remove(this); - } + this._outsideClickDispatcher.remove(this); if (this._host && this._host.parentNode) { this._host.parentNode.removeChild(this._host); diff --git a/src/cdk/overlay/overlay.ts b/src/cdk/overlay/overlay.ts index c51d1fef0b64..455a325e69a2 100644 --- a/src/cdk/overlay/overlay.ts +++ b/src/cdk/overlay/overlay.ts @@ -55,10 +55,8 @@ export class Overlay { private _ngZone: NgZone, @Inject(DOCUMENT) private _document: any, private _directionality: Directionality, - // @breaking-change 8.0.0 `_location` parameter to be made required. - private _location?: Location, - // @breaking-change 9.0.0 `_outsideClickDispatcher` parameter to be made required. - private _outsideClickDispatcher?: OverlayOutsideClickDispatcher) { } + private _location: Location, + private _outsideClickDispatcher: OverlayOutsideClickDispatcher) { } /** * Creates an overlay. diff --git a/src/cdk/schematics/ng-update/data/constructor-checks.ts b/src/cdk/schematics/ng-update/data/constructor-checks.ts index 00acb113dc85..17bd39a7d2ae 100644 --- a/src/cdk/schematics/ng-update/data/constructor-checks.ts +++ b/src/cdk/schematics/ng-update/data/constructor-checks.ts @@ -29,6 +29,10 @@ export const constructorChecks: VersionChanges = { { pr: 'https://github.com/angular/components/pull/20572', changes: ['CdkTreeNodePadding'] + }, + { + pr: 'https://github.com/angular/components/pull/20511', + changes: ['OverlayContainer', 'FullscreenOverlayContainer', 'OverlayRef', 'Overlay'] } ], [TargetVersion.V10]: [ diff --git a/tools/public_api_guard/cdk/overlay.d.ts b/tools/public_api_guard/cdk/overlay.d.ts index 0d68d0f935e8..784228cf0d18 100644 --- a/tools/public_api_guard/cdk/overlay.d.ts +++ b/tools/public_api_guard/cdk/overlay.d.ts @@ -152,8 +152,7 @@ export declare type FlexibleConnectedPositionStrategyOrigin = ElementRef | Eleme }; export declare class FullscreenOverlayContainer extends OverlayContainer implements OnDestroy { - constructor(_document: any, - platform?: Platform); + constructor(_document: any, platform: Platform); protected _createContainer(): void; getFullscreenElement(): Element; ngOnDestroy(): void; @@ -191,15 +190,13 @@ export interface OriginConnectionPosition { export declare class Overlay { scrollStrategies: ScrollStrategyOptions; constructor( - scrollStrategies: ScrollStrategyOptions, _overlayContainer: OverlayContainer, _componentFactoryResolver: ComponentFactoryResolver, _positionBuilder: OverlayPositionBuilder, _keyboardDispatcher: OverlayKeyboardDispatcher, _injector: Injector, _ngZone: NgZone, _document: any, _directionality: Directionality, _location?: Location | undefined, _outsideClickDispatcher?: OverlayOutsideClickDispatcher | undefined); + scrollStrategies: ScrollStrategyOptions, _overlayContainer: OverlayContainer, _componentFactoryResolver: ComponentFactoryResolver, _positionBuilder: OverlayPositionBuilder, _keyboardDispatcher: OverlayKeyboardDispatcher, _injector: Injector, _ngZone: NgZone, _document: any, _directionality: Directionality, _location: Location, _outsideClickDispatcher: OverlayOutsideClickDispatcher); create(config?: OverlayConfig): OverlayRef; position(): OverlayPositionBuilder; static ɵfac: i0.ɵɵFactoryDef; static ɵprov: i0.ɵɵInjectableDef; } -export declare const OVERLAY_PROVIDERS: Provider[]; - export declare class OverlayConfig { backdropClass?: string | string[]; direction?: Direction | Directionality; @@ -225,9 +222,8 @@ export interface OverlayConnectionPosition { export declare class OverlayContainer implements OnDestroy { protected _containerElement: HTMLElement; protected _document: Document; - protected _platform?: Platform | undefined; - constructor(document: any, - _platform?: Platform | undefined); + protected _platform: Platform; + constructor(document: any, _platform: Platform); protected _createContainer(): void; getContainerElement(): HTMLElement; ngOnDestroy(): void; @@ -271,7 +267,7 @@ export declare class OverlayRef implements PortalOutlet, OverlayReference { get backdropElement(): HTMLElement | null; get hostElement(): HTMLElement; get overlayElement(): HTMLElement; - constructor(_portalOutlet: PortalOutlet, _host: HTMLElement, _pane: HTMLElement, _config: ImmutableObject, _ngZone: NgZone, _keyboardDispatcher: OverlayKeyboardDispatcher, _document: Document, _location?: Location | undefined, _outsideClickDispatcher?: OverlayOutsideClickDispatcher | undefined); + constructor(_portalOutlet: PortalOutlet, _host: HTMLElement, _pane: HTMLElement, _config: ImmutableObject, _ngZone: NgZone, _keyboardDispatcher: OverlayKeyboardDispatcher, _document: Document, _location: Location, _outsideClickDispatcher: OverlayOutsideClickDispatcher); addPanelClass(classes: string | string[]): void; attach(portal: ComponentPortal): ComponentRef; attach(portal: TemplatePortal): EmbeddedViewRef;