Skip to content

Commit f939fd7

Browse files
committed
Add filter functionality for shelters
1 parent 4c30d60 commit f939fd7

File tree

5 files changed

+108
-7
lines changed

5 files changed

+108
-7
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,14 @@ export class SheltersService {
2828
);
2929
}
3030

31-
public getAllShelters(lat, lng): Observable<Shelter[]> {
31+
public getAllShelters(lat, lng, radius): Observable<Shelter[]> {
3232
return this.http.get<Shelter[]>(
3333
`${this.apiBaseUrl}/shelters`,
3434
{
3535
params: {
3636
lat: lat,
37-
lng: lng
37+
lng: lng,
38+
radius: radius
3839
}
3940
}
4041
);

client/src/app/shelters/shelter-card/shelter-card.component.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
<div class="card-content">
88
<div class="columns">
99
<div class="column is-4">
10+
<p *ngIf="shelter['official']" class="has-text-success">
11+
<i class="fa fa-check"></i>&nbsp;Official Government Shelter
12+
</p>
1013
<p class="title">
1114
{{ shelter.name }}
1215
</p>

client/src/app/shelters/shelters.component.html

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,43 @@
1717
<div class="content has-text-centered" *ngIf="shelters.length === 0">
1818
<h1 class="has-text-grey-lighter">No shelters available</h1>
1919
</div>
20+
<div class="columns has-text-centered">
21+
<div class="column is-2">
22+
<div class="field">
23+
<div class="control">
24+
<input class="input" type="number" placeholder="Radius (kms)" [(ngModel)]="radius" name="radius" required>
25+
</div>
26+
</div>
27+
</div>
28+
<div class="column is-2">
29+
<div class="field">
30+
<input class="is-checkradio" id="is-infant-friendly" type="checkbox" name="is-infant-friendly"
31+
[(ngModel)]="infantFriendly">
32+
<label for="is-infant-friendly">Infant Friendly</label>
33+
</div>
34+
</div>
35+
<div class="column is-2">
36+
<div class="field">
37+
<input class="is-checkradio" id="is-elder-friendly" type="checkbox" name="is-elder-friendly" [(ngModel)]="elderFriendly">
38+
<label for="is-elder-friendly">Elder Friendly</label>
39+
</div>
40+
</div>
41+
<div class="column is-2">
42+
<div class="field">
43+
<input class="is-checkradio" id="is-official" type="checkbox" name="is-official" [(ngModel)]="official">
44+
<label for="is-official">Official</label>
45+
</div>
46+
</div>
47+
<div class="column is-2">
48+
<div class="field">
49+
<input class="is-checkradio" id="is-verified" type="checkbox" name="is-verified" [(ngModel)]="verified">
50+
<label for="is-verified">Verified</label>
51+
</div>
52+
</div>
53+
<div class="column is-2">
54+
<a class="button is-primary" (click)="updateSearchResults()">Search</a>
55+
</div>
56+
</div>
2057
<div class="columns" *ngFor="let shelter of shelters">
2158
<div class="column">
2259
<app-shelter-card [shelter]="shelter" [user]="user" [zipcodeStatus]="zipcodeStatus" (updateUserDetails)="updateUserDetails($event)"></app-shelter-card>

client/src/app/shelters/shelters.component.ts

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ export class SheltersComponent implements OnInit {
1414
user: any;
1515
zipcodeStatus = {};
1616

17+
radius = 50;
18+
infantFriendly: any;
19+
elderFriendly: any;
20+
official: any;
21+
verified: any;
22+
1723
constructor(
1824
private alertService: AlertService,
1925
private shelterService: SheltersService,
@@ -30,16 +36,17 @@ export class SheltersComponent implements OnInit {
3036
this.shelterService.getLatLng()
3137
.subscribe(
3238
(res) => {
33-
this.shelterService.getAllShelters(res.lat, res.lon)
39+
this.shelterService.getAllShelters(res.lat, res.lon, this.radius)
3440
.subscribe(
35-
(res) => this.shelters = res,
41+
(res) => {
42+
res.sort(this.shelterSortFunc);
43+
this.shelters = res;
44+
},
3645
(err) => this.alertService.error(err)
3746
);
3847
}
3948
);
4049

41-
42-
4350
this.shelterService.getZipcodeStatus()
4451
.subscribe(
4552
(res) => this.zipcodeStatus = res[0],
@@ -51,4 +58,56 @@ export class SheltersComponent implements OnInit {
5158
this.user = user;
5259
}
5360

61+
getShelterScore(shelter) {
62+
var score = 0;
63+
64+
if (this.infantFriendly && shelter.infantFriendly === '1') score++;
65+
if (this.elderFriendly && shelter.elderFriendly === '1') score++;
66+
if (this.official && shelter.official) score++;
67+
if (this.verified && shelter.verified) score++;
68+
69+
return score;
70+
}
71+
72+
shelterSortFunc(a, b) {
73+
var keyA = a['score'],
74+
keyB = b['score'];
75+
76+
if (keyA < keyB) return 1;
77+
if (keyA > keyB) return -1;
78+
79+
keyA = +a['distance'];
80+
keyB = +b['distance'];
81+
82+
if (keyA < keyB) return -1;
83+
if (keyA > keyB) return +1;
84+
85+
return 0;
86+
87+
}
88+
89+
updateSearchResults() {
90+
this.shelterService.getLatLng()
91+
.subscribe(
92+
(res) => {
93+
this.shelterService.getAllShelters(res.lat, res.lon, this.radius)
94+
.subscribe(
95+
(res) => {
96+
for (let i = 0; i < res.length; i++) {
97+
res[i]['score'] = this.getShelterScore(res[i]);
98+
console.log(res[i]);
99+
}
100+
101+
res.sort(this.shelterSortFunc);
102+
103+
this.shelters = res;
104+
console.log(this.shelters);
105+
106+
},
107+
(err) => this.alertService.error(err)
108+
);
109+
}
110+
);
111+
}
112+
54113
}

server/api/shelters/routes/getShelters.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ module.exports = {
3333
handler: async (request, h) => {
3434
const userLat = +request.query.lat
3535
const userLng = +request.query.lng
36+
const radius = +request.query.radius
3637

3738
const shelters = await Shelter.find({}).lean()
3839

@@ -45,7 +46,7 @@ module.exports = {
4546

4647
for (let i = 0; i < shelters.length; i++) {
4748
const dist = distance(userLat, userLng, shelters[i]);
48-
if ( dist < 50) {
49+
if ( dist <= radius) {
4950
shelters[i]['distance'] = dist
5051
nearbyShelters.push(shelters[i])
5152
}

0 commit comments

Comments
 (0)