Skip to content

Commit 974cf7e

Browse files
Ticket #61 : Add EventMesh Server and display its location in the map
1 parent ab0a5fd commit 974cf7e

File tree

5 files changed

+87
-9
lines changed

5 files changed

+87
-9
lines changed

src/FaasNet.Website/src/app/eventmeshservers/list/list.component.html

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,19 @@
88
<button (click)="add()">{{ 'eventmeshservers.add' | translate }}</button>
99
</div>
1010
</div>
11+
<div id="popup">
12+
<div id="popup-content" *ngIf="selectedEventMeshServer">
13+
<div class="item">
14+
<div class="title">Urn</div>
15+
<span>{{ selectedEventMeshServer.urn }}</span>
16+
</div>
17+
<div class="item">
18+
<div class="title">Port</div>
19+
<span>{{ selectedEventMeshServer.port }}</span>
20+
</div>
21+
<div class="item">
22+
<div class="title">Create Datetime</div>
23+
<span>{{ selectedEventMeshServer.createDateTime | date:'short' }}</span>
24+
</div>
25+
</div>
26+
</div>

src/FaasNet.Website/src/app/eventmeshservers/list/list.component.scss

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#map {
2-
position: absolute;
3-
top: 40px;
4-
left: 0px;
5-
right: 0px;
6-
bottom: 0px;
2+
position: absolute;
3+
top: 40px;
4+
left: 0px;
5+
right: 0px;
6+
bottom: 0px;
77
}
88

99

@@ -21,3 +21,21 @@
2121
border: 1px solid #305880;
2222
border-radius: 2px;
2323
}
24+
25+
#popup {
26+
background-color: white;
27+
border-radius: 5px;
28+
}
29+
30+
#popup .item {
31+
border-bottom: 1px solid gray;
32+
padding: 5px 10px 5px 10px;
33+
}
34+
35+
#popup .item:last-child {
36+
border-bottom: none !important;
37+
}
38+
39+
#popup .title {
40+
font-weight: bold;
41+
}

src/FaasNet.Website/src/app/eventmeshservers/list/list.component.ts

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { EventMeshServerResult } from '@stores/eventmeshservers/models/eventmesh
99
import { filter } from 'rxjs/operators';
1010
import { AddEventMeshServerComponent } from './add-eventmeshserver.component';
1111
declare var ol: any;
12+
declare var $: any;
1213

1314
@Component({
1415
selector: 'list-eventmeshservers',
@@ -17,7 +18,9 @@ declare var ol: any;
1718
})
1819
export class ListEventMeshServersComponent implements OnInit {
1920
private _map: any;
20-
private _markersLayer : any;
21+
private _markersLayer: any;
22+
private _overlay: any;
23+
selectedEventMeshServer: EventMeshServerResult | null = null;
2124

2225
constructor(
2326
private store: Store<fromReducers.AppState>,
@@ -61,16 +64,53 @@ export class ListEventMeshServersComponent implements OnInit {
6164
})
6265
});
6366
self._markersLayer = new ol.layer.Vector({
64-
source: new ol.source.Vector()
67+
source: new ol.source.Vector(),
68+
style: new ol.style.Style({
69+
image: new ol.style.Icon({
70+
anchor: [0.5, 0.5],
71+
anchorXUnits: "fraction",
72+
anchorYUnits: "fraction",
73+
src: "/assets/images/marker.svg"
74+
})
75+
})
76+
});
77+
self._overlay = new ol.Overlay({
78+
element: document.getElementById("popup"),
79+
autoPan: true,
80+
autoPanAnimation: {
81+
duration: 250
82+
}
6583
});
6684
self._map.addLayer(self._markersLayer);
85+
self._map.addOverlay(self._overlay);
86+
self._map.on('click', function (evt: any) {
87+
var feature = self._map.forEachFeatureAtPixel(evt.pixel,
88+
function (f : any) {
89+
return f;
90+
});
91+
if (feature) {
92+
const coordinate = evt.coordinate;
93+
self.selectedEventMeshServer = feature.server;
94+
self._overlay.setPosition(coordinate);
95+
} else {
96+
self._overlay.setPosition(undefined);
97+
self.selectedEventMeshServer = null;
98+
}
99+
});
100+
self._map.on('pointermove', function (e : any) {
101+
const pixel = self._map.getEventPixel(e.originalEvent);
102+
const hit = self._map.hasFeatureAtPixel(pixel);
103+
document.body.style.cursor = hit ? 'pointer' : '';
104+
});
67105
this.store.pipe(select(fromReducers.selectEventMeshServersResult)).subscribe((state: EventMeshServerResult[] | null) => {
68106
if (!state) {
69107
return;
70108
}
71109

72110
state.forEach((s: EventMeshServerResult) => {
73111
var marker = new ol.Feature(new ol.geom.Point(ol.proj.fromLonLat([s.longitude, s.latitude])));
112+
marker.server = s;
113+
marker.description = 'coucou';
74114
self._markersLayer.getSource().addFeature(marker);
75115
});
76116
});

src/FaasNet.Website/src/app/functions/view/invoke/invoke.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
<form (ngSubmit)="onSave($event)" class="mt-10">
22
<!-- Configuration parameters -->
3-
<div>
3+
<div class="mb-10">
44
<h3>{{ 'functions.configurationParameters' | translate }}</h3>
55
<div *ngFor="let parameter of option?.Parameters">
66
<function-rendering-component [option]="parameter" [form]="form"></function-rendering-component>
77
</div>
88
</div>
99
<mat-divider></mat-divider>
1010
<!-- Input parameters -->
11-
<div>
11+
<div class="mb-10">
1212
<h3>{{ 'functions.inputParameters' | translate }}</h3>
1313
<div class="form-control">
1414
<div class="title">{{ 'functions.input' | translate }}</div>
Lines changed: 4 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)