Skip to content

refactor(google-maps): tree-shake assertInitialized #30813

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,9 @@ export class DeprecatedMapMarkerClusterer
return new MarkerClusterer(map, [], this._combineOptions());
});

this._assertInitialized();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
this._eventManager.setTarget(this.markerClusterer);
this.markerClustererInitialized.emit(this.markerClusterer);
});
Expand Down Expand Up @@ -352,103 +354,143 @@ export class DeprecatedMapMarkerClusterer
}

fitMapToMarkers(padding: number | google.maps.Padding) {
this._assertInitialized();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The whole point of these methods was that we shouldn't have to add non-null assertions everywhere. I don't think it's a bit deal that we don't tree shake the function itself, because error message is already dropped in production.

this.markerClusterer.fitMapToMarkers(padding);
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
this.markerClusterer!.fitMapToMarkers(padding);
}

getAverageCenter(): boolean {
this._assertInitialized();
return this.markerClusterer.getAverageCenter();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getAverageCenter();
}

getBatchSizeIE(): number {
this._assertInitialized();
return this.markerClusterer.getBatchSizeIE();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getBatchSizeIE();
}

getCalculator(): Calculator {
this._assertInitialized();
return this.markerClusterer.getCalculator();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getCalculator();
}

getClusterClass(): string {
this._assertInitialized();
return this.markerClusterer.getClusterClass();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getClusterClass();
}

getClusters(): Cluster[] {
this._assertInitialized();
return this.markerClusterer.getClusters();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getClusters();
}

getEnableRetinaIcons(): boolean {
this._assertInitialized();
return this.markerClusterer.getEnableRetinaIcons();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getEnableRetinaIcons();
}

getGridSize(): number {
this._assertInitialized();
return this.markerClusterer.getGridSize();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getGridSize();
}

getIgnoreHidden(): boolean {
this._assertInitialized();
return this.markerClusterer.getIgnoreHidden();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getIgnoreHidden();
}

getImageExtension(): string {
this._assertInitialized();
return this.markerClusterer.getImageExtension();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getImageExtension();
}

getImagePath(): string {
this._assertInitialized();
return this.markerClusterer.getImagePath();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getImagePath();
}

getImageSizes(): number[] {
this._assertInitialized();
return this.markerClusterer.getImageSizes();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getImageSizes();
}

getMaxZoom(): number {
this._assertInitialized();
return this.markerClusterer.getMaxZoom();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getMaxZoom();
}

getMinimumClusterSize(): number {
this._assertInitialized();
return this.markerClusterer.getMinimumClusterSize();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getMinimumClusterSize();
}

getStyles(): ClusterIconStyle[] {
this._assertInitialized();
return this.markerClusterer.getStyles();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getStyles();
}

getTitle(): string {
this._assertInitialized();
return this.markerClusterer.getTitle();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getTitle();
}

getTotalClusters(): number {
this._assertInitialized();
return this.markerClusterer.getTotalClusters();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getTotalClusters();
}

getTotalMarkers(): number {
this._assertInitialized();
return this.markerClusterer.getTotalMarkers();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getTotalMarkers();
}

getZIndex(): number {
this._assertInitialized();
return this.markerClusterer.getZIndex();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getZIndex();
}

getZoomOnClick(): boolean {
this._assertInitialized();
return this.markerClusterer.getZoomOnClick();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
return this.markerClusterer!.getZoomOnClick();
}

private _combineOptions(): MarkerClustererOptions {
Expand Down Expand Up @@ -477,7 +519,9 @@ export class DeprecatedMapMarkerClusterer
}

private _watchForMarkerChanges() {
this._assertInitialized();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}

this._ngZone.runOutsideAngular(() => {
this._getInternalMarkers(this._markers).then(markers => {
Expand All @@ -486,14 +530,16 @@ export class DeprecatedMapMarkerClusterer
this._currentMarkers.add(marker);
initialMarkers.push(marker);
}
this.markerClusterer.addMarkers(initialMarkers);
this.markerClusterer!.addMarkers(initialMarkers);
});
});

this._markers.changes
.pipe(takeUntil(this._destroy))
.subscribe((markerComponents: MapMarker[]) => {
this._assertInitialized();
if (typeof ngDevMode === 'undefined' || ngDevMode) {
assertInitialized(this);
}
this._ngZone.runOutsideAngular(() => {
this._getInternalMarkers(markerComponents).then(markers => {
const newMarkers = new Set(markers);
Expand All @@ -510,9 +556,9 @@ export class DeprecatedMapMarkerClusterer
markersToRemove.push(marker);
}
}
this.markerClusterer.addMarkers(markersToAdd, true);
this.markerClusterer.removeMarkers(markersToRemove, true);
this.markerClusterer.repaint();
this.markerClusterer!.addMarkers(markersToAdd, true);
this.markerClusterer!.removeMarkers(markersToRemove, true);
this.markerClusterer!.repaint();
for (const marker of markersToRemove) {
this._currentMarkers.delete(marker);
}
Expand All @@ -526,15 +572,13 @@ export class DeprecatedMapMarkerClusterer
): Promise<google.maps.Marker[]> {
return Promise.all(markers.map(markerComponent => markerComponent._resolveMarker()));
}
}

private _assertInitialized(): asserts this is {markerClusterer: MarkerClustererInstance} {
if (typeof ngDevMode === 'undefined' || ngDevMode) {
if (!this.markerClusterer) {
throw Error(
'Cannot interact with a MarkerClusterer before it has been initialized. ' +
'Please wait for the MarkerClusterer to load before trying to interact with it.',
);
}
}
function assertInitialized(ctx: DeprecatedMapMarkerClusterer) {
if (!ctx.markerClusterer) {
throw Error(
'Cannot interact with a MarkerClusterer before it has been initialized. ' +
'Please wait for the MarkerClusterer to load before trying to interact with it.',
);
}
}
Loading
Loading