Skip to content

Commit

Permalink
added markers service
Browse files Browse the repository at this point in the history
  • Loading branch information
zephenryus committed Sep 24, 2018
1 parent 0d30813 commit 28c73ad
Show file tree
Hide file tree
Showing 14 changed files with 282 additions and 64 deletions.
13 changes: 10 additions & 3 deletions app/Http/Controllers/MarkersController.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,19 @@ class MarkersController extends Controller {
* @return \Illuminate\Http\Response
*/
public function index () {
if (request()->input('types')) {
$types = explode(',', request()->input('types'));
if (request()->input('type')) {
$types = explode(',', request()->input('type'));

return Marker::whereIn('marker_type_id', $types)
->orderBy('marker_name', 'desc')
->get();
->get([
'id',
'marker_type_id',
'marker_name',
'x',
'y',
'z'
]);
}
// else {
// $defaultFilters = [
Expand Down
174 changes: 144 additions & 30 deletions public/js/main.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/js/main.js.map

Large diffs are not rendered by default.

File renamed without changes.
File renamed without changes.
12 changes: 12 additions & 0 deletions resources/assets/js/app/Marker.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export class Marker {
constructor(
public id: number,
public marker_type_id: number,
public marker_name: string,
public x: number,
public y: number,
public z: number,
public marker_description?: string,
public source?: string
) {}
}
9 changes: 9 additions & 0 deletions resources/assets/js/app/MarkerType.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export class MarkerType {
constructor(
public id: number,
public marker_type_name: string,
public marker_type_slug: string,
public icon: string,
public marker_type_description: string
) {}
}
2 changes: 2 additions & 0 deletions resources/assets/js/app/app.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@
<!--<div id="search"></div>-->

<app-marker-filters
[markerTypes]="markerTypes"
[selectedMarkerTypes]="selectedMarkerTypes"
(selectedMarkerTypesChanged)="onSelectedMarkerTypesChanged($event)"
></app-marker-filters>

<!--<app-marker-details></app-marker-details>-->

<app-map
[markerTypes]="markerTypes"
[selectedMarkerTypes]="selectedMarkerTypes"
[selectedMarker]="selectedMarker"
(markerSelected)="onMarkerSelected($event)"
Expand Down
25 changes: 21 additions & 4 deletions resources/assets/js/app/app.component.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,32 @@
import { Component } from '@angular/core';
import { Marker } from "./marker/marker.model";
import { Component, OnInit } from '@angular/core';
import { HttpClient } from "@angular/common/http";
import { Marker } from "./marker.model";
import { MarkerType } from "./MarkerType.model";
import { map } from "rxjs/operators";

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
selectedMarkerTypes: number[] = [100, 498, 932, 2013];
export class AppComponent implements OnInit {
markerTypes: MarkerType[];

selectedMarkerTypes: number[] = [1, 2];
selectedMarker: Marker;

constructor(private http:HttpClient) {}

ngOnInit() {
this.http.get<MarkerType[]>('/marker-types')
.pipe(map(
(markerTypes) => {
this.markerTypes = markerTypes;
}
))
.subscribe();
}

private onMarkerSelected(event) {
console.log(event);
}
Expand Down
10 changes: 7 additions & 3 deletions resources/assets/js/app/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpClientModule } from "@angular/common/http";

import { AppComponent } from './app.component';
import { HttpClientModule } from "@angular/common/http";
import { MapComponent } from "./map/map.component";
import { MarkerFiltersComponent } from "./marker-filters/marker-filters.component";
import { MarkerDetailsComponent } from "./marker-details/marker-details.component";

import { MarkersService } from "./markers.service";

@NgModule({
declarations: [
AppComponent,
Expand All @@ -18,7 +20,9 @@ import { MarkerDetailsComponent } from "./marker-details/marker-details.componen
BrowserModule,
HttpClientModule
],
providers: [],
providers: [
MarkersService
],
bootstrap: [AppComponent]
})
export class AppModule {
Expand Down
53 changes: 48 additions & 5 deletions resources/assets/js/app/map/map.component.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
import { Component, Input, OnChanges, OnInit, Output, SimpleChanges } from "@angular/core";
import { Marker } from "../marker/marker.model";
import { Marker } from "../marker.model";

import * as Leaflet from 'leaflet/dist/leaflet.js';
import { MarkersService } from "../markers.service";
import { MarkerType } from "../MarkerType.model";

@Component({
selector: 'app-map',
templateUrl: './map.component.html'
})
export class MapComponent implements OnInit, OnChanges {
@Input() markerTypes: MarkerType[];
@Input() selectedMarkerTypes: number[];
@Input() selectedMarker: Marker;

// @Output() markerSelected: any;

public isMapGenerated: boolean = false;
private map: Leaflet;
private mapLayers = [];
private mapLayers = {};

constructor(private markersService: MarkersService) {}

ngOnInit() {
this.generateMap();
Expand Down Expand Up @@ -50,7 +55,6 @@ export class MapComponent implements OnInit, OnChanges {
}

ngOnChanges(changes: SimpleChanges): void {
console.log(changes);
if (changes.hasOwnProperty('selectedMarkerTypes')) {
this.selectedMarkersChanged(changes.selectedMarkerTypes);
}
Expand All @@ -60,9 +64,48 @@ export class MapComponent implements OnInit, OnChanges {
if (! values.firstChange) {
let added = values.currentValue.filter(item => values.previousValue.indexOf(item) < 0);
let removed = values.previousValue.filter(item => values.currentValue.indexOf(item) < 0);
console.log(added, removed);

if (added.length > 0) {
this.markersService.getByType(added).subscribe((markers: Marker[]) => {
});
}
} else {
console.log(values.currentValue);
this.markersService.getByType(values.currentValue).subscribe((markers: Marker[]) => {
this.addMarkers(markers);
});
}
}

private addMarkers(markers: Marker[]) {
for (let marker of markers) {
if (!this.mapLayers.hasOwnProperty(marker.marker_type_id.toString())) {
this.mapLayers[marker.marker_type_id.toString()] = Leaflet.layerGroup();
}

let markerTypeGroup = this.mapLayers[marker.marker_type_id.toString()] = Leaflet.layerGroup();

if (this.selectedMarkerTypes.includes(marker.marker_type_id)) {
let newMarker = Leaflet.marker([
-this.normalizeCoord(marker.z),
this.normalizeCoord(marker.x)
], {
icon: Leaflet.icon({
iconUrl: 'images/icons/markers/default.png',
iconSize: [32, 32]
}),
title: marker.marker_name,
zIndexOffset: Math.floor(marker.y),
});
newMarker.markerId = marker.id;
newMarker.layerId = marker.marker_type_id;

markerTypeGroup.addLayer(newMarker);
this.map.addLayer(markerTypeGroup);
}
}
}

private normalizeCoord(coord: number) {
return (coord + 6000) * 0.03125
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
import { Component, EventEmitter, Input, Output } from "@angular/core";
import { MarkerType } from "../MarkerType.model";

@Component({
selector: 'app-marker-filters',
templateUrl: './marker-filters.component.html'
})
export class MarkerFiltersComponent {
@Input() markerTypes: MarkerType[];
@Input() private selectedMarkerTypes: number[];

@Output() selectedMarkerTypesChanged = new EventEmitter<number[]>();



markerCategories: {id: number, selected: boolean}[] = [
{id: 100, selected: true},
{id: 498, selected: true},
{id: 932, selected: true},
{id: 2013, selected: true}
{id: 1, selected: true},
{id: 2, selected: true}
];

toggleType(event) {
Expand Down
12 changes: 0 additions & 12 deletions resources/assets/js/app/marker/marker.model.ts

This file was deleted.

24 changes: 24 additions & 0 deletions resources/assets/js/app/markers.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { map } from "rxjs/operators";

import { Marker } from "./marker.model";

@Injectable({
providedIn: 'root'
})
export class MarkersService {
constructor(private http: HttpClient) {
}

public getByType(types: number[]) {
const typeString = types.join(',');

return this.http.get<Marker[]>('http://127.0.0.1:8000/markers?type=' + typeString)
.pipe(map(
(markers) => {
return markers;
}
));
}
}

0 comments on commit 28c73ad

Please sign in to comment.