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

Commit f8a6553

Browse files
TSHiYKsebholstein
authored andcommitted
feat(MarkerManager): set a visible option to marker.
Closes #524
1 parent df34d0e commit f8a6553

4 files changed

Lines changed: 52 additions & 4 deletions

File tree

src/core/directives/google-map-marker.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ let markerId = 0;
3838
selector: 'sebm-google-map-marker',
3939
inputs: [
4040
'latitude', 'longitude', 'title', 'label', 'draggable: markerDraggable', 'iconUrl',
41-
'openInfoWindow', 'fitBounds', 'opacity'
41+
'openInfoWindow', 'fitBounds', 'opacity', 'visible'
4242
],
4343
outputs: ['markerClick', 'dragEnd']
4444
})
@@ -73,6 +73,11 @@ export class SebmGoogleMapMarker implements OnDestroy, OnChanges, AfterContentIn
7373
*/
7474
iconUrl: string;
7575

76+
/**
77+
* If true, the marker is visible
78+
*/
79+
visible: boolean = true;
80+
7681
/**
7782
* Whether to automatically open the child info window when the marker is clicked.
7883
*/
@@ -137,6 +142,9 @@ export class SebmGoogleMapMarker implements OnDestroy, OnChanges, AfterContentIn
137142
if (changes['opacity']) {
138143
this._markerManager.updateOpacity(this);
139144
}
145+
if (changes['visible']) {
146+
this._markerManager.updateVisible(this);
147+
}
140148
}
141149

142150
private _addEventListeners() {

src/core/services/google-maps-types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export interface Marker extends MVCObject {
2828
setDraggable(draggable: boolean): void;
2929
setIcon(icon: string): void;
3030
setOpacity(opacity: number): void;
31+
setVisible(visible: boolean): void;
3132
getLabel(): MarkerLabel;
3233
}
3334

@@ -39,6 +40,7 @@ export interface MarkerOptions {
3940
draggable?: boolean;
4041
icon?: string;
4142
opacity?: number;
43+
visible?: boolean;
4244
}
4345

4446
export interface MarkerLabel {

src/core/services/managers/marker-manager.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,18 @@ export class MarkerManager {
5353
return this._markers.get(marker).then((m: Marker) => m.setOpacity(marker.opacity));
5454
}
5555

56+
updateVisible(marker: SebmGoogleMapMarker): Promise<void> {
57+
return this._markers.get(marker).then((m: Marker) => m.setVisible(marker.visible));
58+
}
59+
5660
addMarker(marker: SebmGoogleMapMarker) {
5761
const markerPromise = this._mapsWrapper.createMarker({
5862
position: {lat: marker.latitude, lng: marker.longitude},
5963
label: marker.label,
6064
draggable: marker.draggable,
6165
icon: marker.iconUrl,
62-
opacity: marker.opacity
66+
opacity: marker.opacity,
67+
visible: marker.visible
6368
});
6469
this._markers.set(marker, markerPromise);
6570
}

test/services/managers/marker-manager.spec.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ export function main() {
3434
label: 'A',
3535
draggable: false,
3636
icon: undefined,
37-
opacity: 1
37+
opacity: 1,
38+
visible: true
3839
});
3940
}));
4041
});
@@ -77,7 +78,8 @@ export function main() {
7778
label: 'A',
7879
draggable: false,
7980
icon: undefined,
80-
opacity: 1
81+
opacity: 1,
82+
visible: true
8183
});
8284
const iconUrl = 'http://angular-maps.com/icon.png';
8385
newMarker.iconUrl = iconUrl;
@@ -106,6 +108,7 @@ export function main() {
106108
label: 'A',
107109
draggable: false,
108110
icon: undefined,
111+
visible: true,
109112
opacity: 1
110113
});
111114
const opacity = 0.4;
@@ -114,5 +117,35 @@ export function main() {
114117
() => { expect(markerInstance.setOpacity).toHaveBeenCalledWith(opacity); });
115118
})));
116119
});
120+
121+
describe('set visible option', () => {
122+
it('should update that marker via setVisible method when the visible changes',
123+
async(inject(
124+
[MarkerManager, GoogleMapsAPIWrapper],
125+
(markerManager: MarkerManager, apiWrapper: GoogleMapsAPIWrapper) => {
126+
const newMarker = new SebmGoogleMapMarker(markerManager);
127+
newMarker.latitude = 34.4;
128+
newMarker.longitude = 22.3;
129+
newMarker.label = 'A';
130+
newMarker.visible = false;
131+
132+
const markerInstance: Marker =
133+
jasmine.createSpyObj('Marker', ['setMap', 'setVisible']);
134+
(<any>apiWrapper.createMarker).and.returnValue(Promise.resolve(markerInstance));
135+
136+
markerManager.addMarker(newMarker);
137+
expect(apiWrapper.createMarker).toHaveBeenCalledWith({
138+
position: {lat: 34.4, lng: 22.3},
139+
label: 'A',
140+
draggable: false,
141+
icon: undefined,
142+
visible: false,
143+
opacity: 1
144+
});
145+
newMarker.visible = true;
146+
return markerManager.updateVisible(newMarker).then(
147+
() => { expect(markerInstance.setVisible).toHaveBeenCalledWith(true); });
148+
})));
149+
});
117150
});
118151
}

0 commit comments

Comments
 (0)