]> git.uio.no Git - u/erikhf/frm.git/blobdiff - src/components/map/map.ts
merge fun
[u/erikhf/frm.git] / src / components / map / map.ts
index d390c93a9604f8ec38377232b31819b4855972a0..4423114c4f8c0c682729c8bdae1928c96d83b77d 100644 (file)
 import {Component, EventEmitter,CORE_DIRECTIVES,} from 'angular2/angular2';
 import {Headers, Http} from 'angular2/http';
-import {Search} from "../search/search";
 
 @Component({
     selector: 'mou-map',
-    directives: [CORE_DIRECTIVES, Search],
-    events: ['newactive', 'outevent'],
+    directives: [CORE_DIRECTIVES],
+    events: ['newactive', 'neworg'],
     templateUrl: './components/map/map.html'
 })
 
 
 export class Map {
 
+    hideModal:any;
     map:Object;
-    http: Http;
-    LEVEL: number;
-    runned: boolean;
-    parent: Object;
-    currentPos : Object;
-    uprunned: boolean;
+    http:Http;
+    LEVEL:number;
+    runned:boolean;
+    parent:Object;
+    currentPos:Object;
+    uprunned:boolean;
+    activeId:string;
+    currentMarker:Object;
+
+    // COLORS:Object;
+
     constructor(http:Http) {
-        this.outevent = new EventEmitter();
 
+        this.activeId = null;
         this.newactive = new EventEmitter();
-        this.newOrg = new EventEmitter();
-        this.map = new google.maps.Map(document.getElementById("map"),{center: {lat:0,lng:0}, zoom:12});
+        this.neworg = new EventEmitter();
+        this.map = new google.maps.Map(document.getElementById("map"), {
+            center: {lat: 0, lng: 0},
+            zoom: 12,
+            mapTypeControlOptions: {
+                position: google.maps.ControlPosition.BOTTOM_CENTER
+            },
+            zoomControlOptions:{
+                position: google.maps.ControlPosition.LEFT_BOTTOM
+            },
+            streetViewControl: false
+        });
         this.init();
         this.http = http;
         this.LEVEL = 2;
         this.runned = false;
-        this.getData('?paging=false&level=2',this);
-        this.parent =null ;
+        this.getData('?paging=false&level=2', this);
+        this.parent = null;
         this.currentPos = null;
         this.uprunned = false;
+        this.currentMarker = null;
+        // this.COLORS = {'red','brown',',yellow','green',',pink','purple','gray','black'};
+        this.hideModal = document.getElementById("topLevel").style.visibility = "hidden";
+        this.hideModal = document.getElementById("middleLevel").style.visibility = "hidden";
+        this.hideModal = document.getElementById("bottomLevel").style.visibility = "hidden";
+        this.hideModal = document.getElementById("divModal").style.display = "none";
+    }
+
+    showModal() {
+        return this.hideModal = document.getElementById("divModal").style.display = "block";
+    }
+
+    closeModal() {
+        this.hideModal = document.getElementById("topLevel").style.visibility = "hidden";
+        this.hideModal = document.getElementById("middleLevel").style.visibility = "hidden";
+        this.hideModal = document.getElementById("bottomLevel").style.visibility = "hidden";
+        this.hideModal = document.getElementById("divModal").style.visibility = "hidden";
+
+        this.setRunned(false);
+
+    }
+
+    html() {
+        this.currentMarker.setMap(null);
 
+        this.closeModal();
     }
 
-    getMap(){
+    setActiveId(id) {
+        this.activeId = id;
+    }
+
+    getMap() {
         return this.map;
     }
 
-    getHttp(){
+    getHttp() {
         return this.http;
     }
-    setcurrentPos(latlng){
+
+    setcurrentPos(latlng) {
         this.currentPos = latlng;
     }
-     getcurrentPos(){
-         return this.currentPos;
-     }
 
-    setParent(id){
-        console.log("satte parents");
-        this.parent=id;
+    getcurrentPos() {
+        return this.currentPos;
+    }
+
+    setParent(id) {
+        this.parent = id;
     }
-    getParent(){
-        return this.parent;
 
+    getParent() {
+        return this.parent;
     }
 
-    setRunned(value){
+    setRunned(value) {
         this.runned = value;
     }
 
-    setupRunned(value){
+    setupRunned(value) {
         this.uprunned = value;
     }
 
-    setLevel(value){
+    setLevel(value) {
         this.LEVEL = value;
     }
-    addLevel(){
+
+    addLevel() {
         this.LEVEL++;
     }
-    upLevel(){
+
+    upLevel() {
         this.LEVEL--;
     }
-    inevent(e){
-        this.outevent.next(e);
-    }
-
 
     init() {
 
         let map = this.map;
-        let pos = {lat: 9.1, lng: -10.6};
+        let pos = {lat: 9.1, lng: -11.6};
+
+        map.setCenter(pos, 0);
+        map.setZoom(7);
 
-        map.setCenter(pos,12);
-    }
 
+    }
 
     logError(error) {
         console.error(error);
 
     }
 
-    getData(query,instance, isParent){
-        instance.http.get(dhisAPI+'/api/organisationUnits'+query)
+    getData(query, instance, isParent) {
+        instance.http.get(dhisAPI + '/api/organisationUnits' + query)
             .map(res => res.json())
             .subscribe(
-                res => instance.parseResult(res,instance,isParent),
+                res => instance.parseResult(res, instance, isParent),
                 error => instance.logError(error)
-
             );
-
     }
 
-    parseResult(res,instance,isParent){
-        console.log("parent: "+isParent);
+    parseResult(res, instance, isParent) {
 
-        if(isParent) {
-            console.log(instance.LEVEL);
-            console.log('/'+res.parent.id+'/children');
-            console.log(res);
+        if (isParent) {
             instance.setParent(res.parent.id);
-            instance.getData('/'+res.parent.id+'/children',instance,false);
+            instance.getData('/' + res.parent.id + '/children', instance, false);
         }
-        else{
-
-            console.log(res);
+        else {
             if (res.organisationUnits) {
                 for (let item in res.organisationUnits) {
                     this.getData('/' + res.organisationUnits[item].id, this);
@@ -126,7 +163,6 @@ export class Map {
                 }
                 instance.setupRunned(false);
                 instance.setRunned(false);
-                //liten hack
             } else if (!res.displayName && res.children) {
                 for (let item in res.children) {
                     if (res.children[item].level == instance.LEVEL) {
@@ -139,31 +175,27 @@ export class Map {
             else {
                 this.drawPolygon(res, instance);
             }
-
         }
-
     }
 
-    drawPolygon(item, instance){
-        console.log("tegne polygon");
-        let bounds = new google.maps.LatLngBounds();
+    drawPolygon(item, instance) {
         let feature;
-        let incoming: string;
+        let incoming:string;
         incoming = item.featureType.toLowerCase();
-        switch(incoming){
+        switch (incoming) {
             case "point":
                 feature = 'Point';
                 break;
             case "multi_polygon":
                 feature = 'MultiPolygon';
                 break;
-             case "polygon":
-                 feature = 'MultiPolygon';
+            case "polygon":
+                feature = 'MultiPolygon';
                 break;
             default:
         }
-          // TODO: test på feature og behandle type: NONE
-        if(feature !== undefined) {
+        // TODO: test på feature og behandle type: NONE
+        if (feature !== undefined) {
             let unit = {
                 "type": "Feature",
                 "geometry": {
@@ -173,161 +205,180 @@ export class Map {
                 "properties": {
                     "name": item.name,
                     "id": item.id,
-
-                },
-                "style": null
+                    "color": "gray",
+                    "icon": null
+                }
             };
-            if(unit.geometry.type == 'Point'){
 
-               //ToDO: add en style på markeren !
+            if (unit.geometry.type == 'Point') {
+                unit.properties.icon = {
+                    path: google.maps.SymbolPath.CIRCLE,
+                    scale: 3
+                };
 
             }
-            this.map.data.addGeoJson(unit);
-
-                this.map.data.addListener('click', function (event) {
-                    //TODO: spør om man vil ned/opp eller se info
-                    //TODO: finne liste over alle levels slike at man ikke har hardkodet inn < 4 !!
-
-                    console.log(instance.LEVEL);
 
-                    if (instance.runned == false && instance.LEVEL < 4) {
-                        instance.setRunned(true);
-
-                        let infowindow = new google.maps.InfoWindow({
-                            //TODO: Style this
-                            content: '<div> <button >DrillUP</button>' +
-                            ' <button ">DrillDOWN</button>' +
-                            '<button ">SEEINFO</button></div>'
-                        });
-
-                        infowindow.setPosition(event.latlng);
-                        // infowindow.open(instance.map);
-
-                        let id = event.feature.O.id;
-                        instance.setParent(id);
-                        console.log(id);
+            this.map.data.addGeoJson(unit);
+            this.map.data.setStyle(function (feature) {
+                let color = 'gray';
+                let icon;
+                if (feature.getProperty('icon') !== null) {
+                    icon = feature.getProperty('icon');
+                }
+                color = feature.getProperty('color');
+                return /** @type {google.maps.Data.StyleOptions} */({
+                    fillColor: color,
+                    strokeColor: color,
+                    strokeWeight: 3,
+                    icon: icon
+                });
+            });
 
-                        instance.map.data.forEach(function (feature) {
-                            instance.map.data.remove(feature);
-                        });
 
-                        instance.addLevel();
-                        instance.getData('/' + id + '/children', instance);
-                    } else if (instance.runned == false && instance.LEVEL >= 4) {
-                        instance.setRunned(true);
-                        let infowindowNew = new google.maps.InfoWindow({
-                            //TODO: Style this
-                            content: '<div>Du you want to add a new OrgUnit here ?    <button onclick="myFunction()">Yes</button></div>'
-                        });
-                        instance.setcurrentPos(event.latLng);
+            this.map.data.addListener('click', function (event) {
+                instance.setActiveId(event.feature.O.id);
+                instance.setcurrentPos(event.latLng);
 
-                        var marker = new google.maps.Marker({
-                            position: event.latLng,
-                            map: instance.map,
-                            title: 'newOrg',
-                            icon: {
-                                path: google.maps.SymbolPath.CIRCLE,
-                                scale: 5
-                            }
 
-                        });
+                //TODO: finne liste over alle levels slike at man ikke har hardkodet inn < 4 !!
+                if (instance.uprunned == false && instance.LEVEL == 2) {
+                    this.hideModal = document.getElementById("topLevel").style.visibility = "visible";
+                    this.hideModal = document.getElementById("middleLevel").style.visibility = "hidden";
+                    this.hideModal = document.getElementById("bottomLevel").style.visibility = "hidden";
+                    instance.showModal();
 
-                        marker.setMap(instance.map);
+                }
+                else if (instance.runned == false && instance.LEVEL < 4) {
+                    this.hideModal = document.getElementById("topLevel").style.visibility = "hidden";
+                    this.hideModal = document.getElementById("middleLevel").style.visibility = "visible";
+                    this.hideModal = document.getElementById("bottomLevel").style.visibility = "hidden";
+                    instance.showModal();
+                } else if (instance.runned == false && instance.LEVEL <= 4) {
 
-                        infowindowNew.open(instance.map, marker);
+                    this.hideModal = document.getElementById("topLevel").style.visibility = "hidden";
+                    this.hideModal = document.getElementById("middleLevel").style.visibility = "hidden";
+                    this.hideModal = document.getElementById("bottomLevel").style.visibility = "visible";
 
-                        infowindowNew.addListener('closeclick', function (e) {
-                            marker.setMap(null);
-                        });
+                    instance.setcurrentPos(event.latLng);
+                    instance.showModal();
 
-                        instance.addUnit();
+                }
 
 
-                    }
+            });
+        }
+        else {
+            // ToDO:
+            console.log("fiks meg! gi warning på topp av kart");
+        }
+    }
 
+    drillDown() {
+        this.closeModal();
+        let map = this.getMap();
+        let id = this.activeId;
+        let level = this.LEVEL;
+        console.log(id);
+        this.setRunned(true);
+        this.setParent(id);
 
-                });
+        map.data.forEach(function (feature) {
+            if (!(feature.O.id == id && level == 3)) {
+                map.data.remove(feature);
 
+            }
+        });
 
-            this.map.data.addListener('rightclick', function(event) {
-                if(instance.uprunned == false) {
-                    instance.setupRunned(true);
+        this.addLevel();
+        this.getData('/' + id + '/children', this);
 
-                    instance.upLevel();
 
-                    if (instance.LEVEL > 1) {
-                        instance.map.data.forEach(function (feature) {
-                            instance.map.data.remove(feature);
-                        });
+    }
 
-                        let parent = instance.getParent();
-                        instance.getData('/'+parent, instance,true);
-                    }
-                    else {
-                        instance.addLevel();
-                        instance.setupRunned(true);
-                        //TODO skriv en warning om at man ikke kan gå opp
+    drillUp() {
 
-                }
+        if (this.LEVEL > 2) {
+            this.setupRunned(true);
+            this.upLevel();
+            let instance = this;
+            this.closeModal();
+            this.map.data.forEach(function (feature) {
+                instance.map.data.remove(feature);
 
-                }
             });
-
-
-        }else {
-            // ToDO:
-            console.log("fiks meg! gi warning på topp av kart");
+            let parent = instance.getParent();
+            instance.getData('/' + parent, instance, true);
         }
-
-
+        this.closeModal();
     }
 
-    addUnit(){
+    seeDetails() {
+        let map = this.getMap();
+        let id = this.activeId;
+        this.closeModal();
+        map.data.forEach(function (feature) {
+            if (feature.getProperty('id') == id) {
+                feature.setProperty('color', 'red');
+            }
+        });
+        this.newactive.next(this.activeId);
+    }
 
-        let parent = this.getParent();
+    addUnit() {
+        this.closeModal();
         let pos = this.getcurrentPos();
         let lat = pos.lat();
-        let lng = pos.lng()
-        let location= {lat: lat, lng: lng};
-        let event =  {location,parent};
-        this.newOrg.next(event);
+        let lng = pos.lng();
 
-    }
+        let parent = this.getParent();
 
-    myFunction(){
-        console.log("Inne i myfunksjonen");
-    }
 
+        let location = {lat: lat, lng: lng};
+        let event = {location, parent};
+        this.neworg.next(event);
+        this.closeModal();
+        this.setRunned(false);
+    }
 
-    update(event){
+    update(event) {
         this.newactive.next(event);
-        let getResult = Object;
-        let test = this.getMap();
+        let map = this.getMap();
         let http = this.getHttp();
 
-        test.data.forEach(function (feature) {
-            test.data.remove(feature);
+        map.data.forEach(function (feature) {
+            map.data.remove(feature);
         });
-        http.get(dhisAPI+'/api/organisationUnits/'+event)
+        http.get(dhisAPI + '/api/organisationUnits/' + event)
             .map(res => res.json())
             .subscribe(
                 res=> this.mapUpdate(res, this)
-
             );
-
-
-
-
     }
 
-    mapUpdate(res, instance){
-        console.log(res.level);
+    mapUpdate(res, instance) {
         this.setLevel(res.level);
         this.setParent(res.parent.id);
-        this.drawPolygon(res,instance);
+        this.drawPolygon(res, instance);
 
     }
 
+
+    tempMarker(pos) {
+        let map = this.map;
+        if(this.currentMarker)
+            this.currentMarker.setMap(null);
+
+        this.currentMarker = new google.maps.Marker({
+            position: pos,
+            map: map,
+            title: 'neworg',
+            icon: {
+                path: google.maps.SymbolPath.CIRCLE,
+                scale: 3
+            }
+        });
+        this.currentMarker.setMap(map);
+    }
 }