Skip to content

Commit 6ae9741

Browse files
crisbetojelbourn
authored andcommitted
refactor(google-maps): use directive for map marker (#19641)
The Google Maps marker is currently marked as a component, but it isn't using any component features. These changes turn it into a directive since it also allows consumers to apply it on elements that are components.
1 parent fdfec2f commit 6ae9741

File tree

4 files changed

+21
-31
lines changed

4 files changed

+21
-31
lines changed

src/dev-app/google-map/google-map-demo.html

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77
(mapMousemove)="handleMove($event)"
88
(mapRightclick)="handleRightclick()"
99
[mapTypeId]="mapTypeId">
10-
<map-marker #firstMarker [position]="center" (mapClick)="clickMarker(firstMarker)"></map-marker>
11-
<map-marker #marker
10+
<map-marker
11+
#firstMarker="mapMarker"
12+
[position]="center"
13+
(mapClick)="clickMarker(firstMarker)"></map-marker>
14+
<map-marker #marker="mapMarker"
1215
*ngFor="let markerPosition of markerPositions"
1316
[position]="markerPosition"
1417
[options]="markerOptions"

src/google-maps/map-marker/map-marker.spec.ts

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {Component, ViewChild} from '@angular/core';
22
import {async, TestBed} from '@angular/core/testing';
3-
import {By} from '@angular/platform-browser';
43

54
import {DEFAULT_OPTIONS} from '../google-map/google-map';
65

@@ -124,44 +123,44 @@ describe('MapMarker', () => {
124123
createMarkerConstructorSpy(markerSpy).and.callThrough();
125124

126125
const fixture = TestBed.createComponent(TestApp);
127-
const markerComponent = fixture.debugElement.query(By.directive(MapMarker)).componentInstance;
128126
fixture.detectChanges();
127+
const marker = fixture.componentInstance.marker;
129128

130129
markerSpy.getAnimation.and.returnValue(null);
131-
expect(markerComponent.getAnimation()).toBe(null);
130+
expect(marker.getAnimation()).toBe(null);
132131

133132
markerSpy.getClickable.and.returnValue(true);
134-
expect(markerComponent.getClickable()).toBe(true);
133+
expect(marker.getClickable()).toBe(true);
135134

136135
markerSpy.getCursor.and.returnValue('cursor');
137-
expect(markerComponent.getCursor()).toBe('cursor');
136+
expect(marker.getCursor()).toBe('cursor');
138137

139138
markerSpy.getDraggable.and.returnValue(true);
140-
expect(markerComponent.getDraggable()).toBe(true);
139+
expect(marker.getDraggable()).toBe(true);
141140

142141
markerSpy.getIcon.and.returnValue('icon');
143-
expect(markerComponent.getIcon()).toBe('icon');
142+
expect(marker.getIcon()).toBe('icon');
144143

145144
markerSpy.getLabel.and.returnValue(null);
146-
expect(markerComponent.getLabel()).toBe(null);
145+
expect(marker.getLabel()).toBe(null);
147146

148147
markerSpy.getOpacity.and.returnValue(5);
149-
expect(markerComponent.getOpacity()).toBe(5);
148+
expect(marker.getOpacity()).toBe(5);
150149

151150
markerSpy.getPosition.and.returnValue(null);
152-
expect(markerComponent.getPosition()).toEqual(null);
151+
expect(marker.getPosition()).toEqual(null);
153152

154153
markerSpy.getShape.and.returnValue(null);
155-
expect(markerComponent.getShape()).toBe(null);
154+
expect(marker.getShape()).toBe(null);
156155

157156
markerSpy.getTitle.and.returnValue('title');
158-
expect(markerComponent.getTitle()).toBe('title');
157+
expect(marker.getTitle()).toBe('title');
159158

160159
markerSpy.getVisible.and.returnValue(true);
161-
expect(markerComponent.getVisible()).toBe(true);
160+
expect(marker.getVisible()).toBe(true);
162161

163162
markerSpy.getZIndex.and.returnValue(2);
164-
expect(markerComponent.getZIndex()).toBe(2);
163+
expect(marker.getZIndex()).toBe(2);
165164
});
166165

167166
it('initializes marker event handlers', () => {

src/google-maps/map-marker/map-marker.ts

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,7 @@
99
// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265
1010
/// <reference types="googlemaps" />
1111

12-
import {
13-
ChangeDetectionStrategy,
14-
Component,
15-
Input,
16-
OnDestroy,
17-
OnInit,
18-
Output,
19-
ViewEncapsulation,
20-
NgZone
21-
} from '@angular/core';
12+
import {Input, OnDestroy, OnInit, Output, NgZone, Directive} from '@angular/core';
2213
import {BehaviorSubject, combineLatest, Observable, Subject} from 'rxjs';
2314
import {map, take, takeUntil} from 'rxjs/operators';
2415

@@ -39,12 +30,9 @@ export const DEFAULT_MARKER_OPTIONS = {
3930
*
4031
* See developers.google.com/maps/documentation/javascript/reference/marker
4132
*/
42-
@Component({
33+
@Directive({
4334
selector: 'map-marker',
4435
exportAs: 'mapMarker',
45-
template: '<ng-content></ng-content>',
46-
changeDetection: ChangeDetectionStrategy.OnPush,
47-
encapsulation: ViewEncapsulation.None,
4836
})
4937
export class MapMarker implements OnInit, OnDestroy, MapAnchorPoint {
5038
private _eventManager = new MapEventManager(this._ngZone);

tools/public_api_guard/google-maps/google-maps.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ export declare class MapMarker implements OnInit, OnDestroy, MapAnchorPoint {
174174
getZIndex(): number | null;
175175
ngOnDestroy(): void;
176176
ngOnInit(): void;
177-
static ɵcmp: i0.ɵɵComponentDefWithMeta<MapMarker, "map-marker", ["mapMarker"], { "options": "options"; "title": "title"; "position": "position"; "label": "label"; "clickable": "clickable"; }, { "animationChanged": "animationChanged"; "mapClick": "mapClick"; "clickableChanged": "clickableChanged"; "cursorChanged": "cursorChanged"; "mapDblclick": "mapDblclick"; "mapDrag": "mapDrag"; "mapDragend": "mapDragend"; "draggableChanged": "draggableChanged"; "mapDragstart": "mapDragstart"; "flatChanged": "flatChanged"; "iconChanged": "iconChanged"; "mapMousedown": "mapMousedown"; "mapMouseout": "mapMouseout"; "mapMouseover": "mapMouseover"; "mapMouseup": "mapMouseup"; "positionChanged": "positionChanged"; "mapRightclick": "mapRightclick"; "shapeChanged": "shapeChanged"; "titleChanged": "titleChanged"; "visibleChanged": "visibleChanged"; "zindexChanged": "zindexChanged"; }, never, ["*"]>;
177+
static ɵdir: i0.ɵɵDirectiveDefWithMeta<MapMarker, "map-marker", ["mapMarker"], { "options": "options"; "title": "title"; "position": "position"; "label": "label"; "clickable": "clickable"; }, { "animationChanged": "animationChanged"; "mapClick": "mapClick"; "clickableChanged": "clickableChanged"; "cursorChanged": "cursorChanged"; "mapDblclick": "mapDblclick"; "mapDrag": "mapDrag"; "mapDragend": "mapDragend"; "draggableChanged": "draggableChanged"; "mapDragstart": "mapDragstart"; "flatChanged": "flatChanged"; "iconChanged": "iconChanged"; "mapMousedown": "mapMousedown"; "mapMouseout": "mapMouseout"; "mapMouseover": "mapMouseover"; "mapMouseup": "mapMouseup"; "positionChanged": "positionChanged"; "mapRightclick": "mapRightclick"; "shapeChanged": "shapeChanged"; "titleChanged": "titleChanged"; "visibleChanged": "visibleChanged"; "zindexChanged": "zindexChanged"; }, never>;
178178
static ɵfac: i0.ɵɵFactoryDef<MapMarker, never>;
179179
}
180180

0 commit comments

Comments
 (0)