Skip to content

Commit 50a3fb4

Browse files
committed
Implement functionality to request shelters
1 parent e39d29a commit 50a3fb4

File tree

3 files changed

+87
-4
lines changed

3 files changed

+87
-4
lines changed

client/src/app/_services/shelters.service.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,17 @@ export class SheltersService {
4141
{ shelter: shelter }
4242
);
4343
}
44+
45+
public requestShelter(lngLat): Observable<any> {
46+
return this.http.post(
47+
`${this.apiBaseUrl}/users/request`,
48+
{ lngLat: lngLat }
49+
);
50+
}
51+
52+
public getShelterRequest(): Observable<any> {
53+
return this.http.get(
54+
`${this.apiBaseUrl}/users/request`
55+
);
56+
}
4457
}

client/src/app/request-shelter/request-shelter.component.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
<div class="container">
55
<div class="section content">
66
<h2 class="has-text-white">Locate your position on map</h2>
7-
<button class="button is-info">Clear</button>
7+
<button class="button is-info" (click)="submitRequest()">Submit Request</button>&nbsp;
8+
<button class="button is-info" (click)="clearRequest()">Clear</button>
89
</div>
910
</div>
1011
</div>
1112
</div>
13+
<input type="hidden" id="lnglat" name="lnglat">
1214
<div id="map"></div>
1315
</div>

client/src/app/request-shelter/request-shelter.component.ts

Lines changed: 71 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,32 @@
1-
import { Component, AfterViewInit } from '@angular/core';
1+
import { Component, AfterViewInit, OnInit } from '@angular/core';
22
import { environment } from 'src/environments/environment';
33
import * as mapboxgl from 'mapbox-gl';
44
import * as MapboxGeocoder from '@mapbox/mapbox-gl-geocoder';
5+
import { SheltersService } from '../_services/shelters.service';
6+
import * as $ from 'jquery';
7+
import { AlertService } from '../_services/alert.service';
8+
import { Router } from '@angular/router';
59

610
@Component({
711
selector: 'app-request-shelter',
812
templateUrl: './request-shelter.component.html',
913
styleUrls: ['./request-shelter.component.css']
1014
})
11-
export class RequestShelterComponent implements AfterViewInit {
15+
export class RequestShelterComponent implements AfterViewInit, OnInit {
1216
mapboxAccessToken = environment.mapboxAccessToken;
17+
requestCoordinates: any;
1318

14-
constructor() { }
19+
constructor(
20+
private sheltersService: SheltersService,
21+
private alertService: AlertService,
22+
private router: Router
23+
) { }
24+
25+
ngOnInit() {
26+
}
1527

1628
ngAfterViewInit() {
29+
console.log(this.requestCoordinates);
1730
Object.getOwnPropertyDescriptor(mapboxgl, "accessToken").set(this.mapboxAccessToken);
1831

1932
var map = new mapboxgl.Map({
@@ -33,6 +46,61 @@ export class RequestShelterComponent implements AfterViewInit {
3346
map.addControl(new MapboxGeocoder({
3447
accessToken: mapboxgl.accessToken
3548
}));
49+
50+
var personMarkerDiv = document.createElement('div');
51+
personMarkerDiv.style.backgroundImage = 'url("../../assets/person.png")';
52+
personMarkerDiv.style.width = '100px';
53+
personMarkerDiv.style.height = '100px';
54+
personMarkerDiv.style.backgroundRepeat = 'no-repeat'
55+
56+
this.sheltersService.getShelterRequest()
57+
.subscribe(
58+
(res) => {
59+
this.requestCoordinates = res.lngLat;
60+
61+
if (this.requestCoordinates) {
62+
new mapboxgl.Marker(personMarkerDiv)
63+
.setLngLat(this.requestCoordinates.split(','))
64+
.addTo(map);
65+
}
66+
},
67+
(err) => this.alertService.error(err)
68+
)
69+
70+
map.on('click', function (e) {
71+
if (this.shelterMarker) {
72+
this.shelterMarker.remove();
73+
}
74+
75+
this.shelterMarker = new mapboxgl.Marker(personMarkerDiv)
76+
.setLngLat(e.lngLat)
77+
.addTo(map);
78+
79+
$('#lnglat').val(`${e.lngLat.lng},${e.lngLat.lat}`);
80+
});
81+
}
82+
83+
submitRequest() {
84+
if (!$('#lnglat').val()) {
85+
this.alertService.errorWithMessage('Location is needed')
86+
return;
87+
}
88+
89+
this.sheltersService.requestShelter($('#lnglat').val())
90+
.subscribe(
91+
(res) => this.alertService.success('Request submitted'),
92+
(err) => this.alertService.error(err)
93+
)
3694
}
3795

96+
clearRequest() {
97+
this.sheltersService.requestShelter('')
98+
.subscribe(
99+
() => {
100+
this.alertService.success('Request cleared');
101+
window.location.reload();
102+
},
103+
(err) => this.alertService.error(err)
104+
);
105+
}
38106
}

0 commit comments

Comments
 (0)