]> git.uio.no Git - u/erikhf/frm.git/blobdiff - src/components/search/search.ts
Added message for no result when searching
[u/erikhf/frm.git] / src / components / search / search.ts
index 951c866a9acf781a1873ff3ad8e410379ec8ac3e..b41364ff0b1ef62119927661a77ea727dafc6b69 100644 (file)
-import {Component, View, CORE_DIRECTIVES} from 'angular2/angular2';
+import {Component,EventEmitter, View, CORE_DIRECTIVES} from 'angular2/angular2';
+import {Http} from 'angular2/http';
 import {LiveSearch} from "./livesearch";
+import {Sidebar} from "../sidebar/sidebar";
+import * as Rx from '@reactivex/rxjs/dist/cjs/Rx';
+
+declare var zone:Zone;
 
 @Component({
     selector: 'mou-search',
     directives: [CORE_DIRECTIVES, LiveSearch],
-    templateUrl: './components/search/search.html'
+    events: ['newsearch'],
+    templateUrl: './components/search/search.html',
+    styleUrls: ['./components/search/search.css']
 })
 export class Search {
-    orgunits: Array<any> = [];
-    loading: boolean = false;
+    orgunits:Array<any> = [];
+    filteredOrgunits:Array<any> = [];
+    loading:boolean = false;
+    groups:Array<any> = [];
+    groupSet:Array<any> = [];
+    ownershipSelector:any;
+    typeSelector:any;
+    locationSelector:any;
+    option:any;
+    searchBar:any;
+    filterset:boolean = false;
+    emptySearch:any;
+    dropdown:any;
+    slide:any;
+    noresult:Object;
+
+
+    constructor(public http:Http) {
+        this.newsearch = new EventEmitter();
+        this.visible = true;
+        this.emptySearch = document.getElementById("divresult");
+        this.getUnitGroupSets();
+        this.ownershipSelector = document.getElementById("ownershipSelector");
+        this.typeSelector = document.getElementById("typeSelector");
+        this.locationSelector = document.getElementById("locationSelector");
+        this.searchBar = document.getElementById("livesearch");
+        this.orglist = document.getElementById("orglist");
+        this.a = document.getElementById("testunit");
+        this.dropdown = document.getElementById("dropdown-menu");
+        this.noresult = {name: "No matching result", lastUpdated: ""};
+    }
+
+    getMoreInfo(orgunit) {
+        this.orgunits = [];
+        this.newsearch.next(orgunit.id);
+    }
+
+    //pil opp og ned
+
+    toggle() {
+        this.visible = !this.visible;
+        if (this.visible) {
+            this.resetSelector();
+        }
+    }
+
+    resetSelector(){
+        this.ownershipSelector.selectedIndex = 0;
+        this.typeSelector.selectedIndex = 0;
+        this.locationSelector.selectedIndex = 0;
+        this.checkOrgunits();
+    }
+
+    hideDiv() {
+        if (livesearch.value == "")
+            return true;
+
+    }
+
+    emptyByClick() {
+        return this.emptySearch = document.getElementById("divresult").style.visibility = "hidden";
+    }
+
+    searchKeydown() {
+        if (this.filterset) {
+            this.filterset = false;
+            this.setFilter();
+        }
+    }
+
+    getUnitGroupSets() {
+        this.http.get(dhisAPI + "/api/organisationUnitGroupSets")
+            .map(res => res.json())
+            .map(res => res.organisationUnitGroupSets)
+            .subscribe(
+                zone.bind(res => {
+                    this.setOptionHeader(this.ownershipSelector, res[0].name);
+                    this.setOptionHeader(this.typeSelector, res[1].name);
+                    this.setOptionHeader(this.locationSelector, res[2].name);
+
+                    for (var i = 0; i < res.length; i++) {
+                        this.http.get(res[i].href)
+                            .map(result => result.json())
+                            .subscribe(
+                                zone.bind(result => {
+                                    if (result.displayName == "Facility Ownership") {
+                                        for (var j = 0; j < result.organisationUnitGroups.length; j++) {
+                                            this.setOption(this.ownershipSelector, result.organisationUnitGroups[j].name);
+                                        }
+                                    }
+                                    else if (result.displayName == "Facility Type") {
+                                        for (var j = 0; j < result.organisationUnitGroups.length; j++) {
+                                            this.setOption(this.typeSelector, result.organisationUnitGroups[j].name);
+                                        }
+                                    }
+                                    else if (result.displayName == "Location Rural/Urban") {
+                                        for (var j = 0; j < result.organisationUnitGroups.length; j++) {
+                                            this.setOption(this.locationSelector, result.organisationUnitGroups[j].name);
+                                        }
+                                    }
+                                }));
+                    }
+                })
+            )
+    }
+
+    setOptionHeader(selector, value) {
+        this.option = document.createElement("option");
+        this.option.text = "-- " + value + " --";
+        this.option.value = "";
+        selector.appendChild(this.option);
+    }
+
+    setOption(selector, value) {
+        this.option = document.createElement("option");
+        this.option.text = value;
+        this.option.value = value;
+        selector.appendChild(this.option);
+    }
+
+    checkOrgunits() {
+        if (this.ownershipSelector.value == "" && this.typeSelector.value == "" && this.locationSelector.value == "") {
+            this.filteredOrgunits = [];
+            for (var i = 0; i < this.orgunits.length; i++) {
+                this.filteredOrgunits.push(this.orgunits[i]);
+            }
+        }
+        else if (!this.orgunits.length == false && !this.filterset) {
+            this.setFilter();
+        }
+        else if (!this.orgunits.length) {
+            this.filteredOrgunits = [];
+            if (this.filterset) {
+                this.filterset = false;
+            }
+        }
+        if(livesearch.value > 2)
+            return false;
+
+        else
+            !this.orgunits.length;
+    }
+
 
-    constructor(){
+    setFilter() {
+        this.filteredOrgunits = [];
+        this.filterset = true;
+        for (var i = 0; i < this.orgunits.length; i++) {
+            this.http.get(this.orgunits[i].href)
+                .map(res => res.json())
+                .subscribe(
+                    zone.bind(orgunits => {
+                        if (this.ownershipSelector.value == "" && this.typeSelector.value == "" && this.locationSelector.value == "") {
+                            this.filteredOrgunits.push(orgunits);
+                        }
+                        else {
+                            var os = false;
+                            var ls = false;
+                            var ts = false;
+                            for (var j = 0; j < orgunits.organisationUnitGroups.length; j++) {
+                                if (this.ownershipSelector.value != "") {
+                                    if (orgunits.organisationUnitGroups[j].name == this.ownershipSelector.value) {
+                                        os = true;
+                                    }
+                                }
+                                if (this.ownershipSelector.value == "") {
+                                    os = true;
+                                }
+                                if (this.typeSelector.value != "") {
+                                    if (orgunits.organisationUnitGroups[j].name == this.typeSelector.value) {
+                                        ts = true;
+                                    }
+                                }
+                                if (this.typeSelector.value == "") {
+                                    ts = true;
+                                }
+                                if (this.locationSelector.value != "") {
+                                    if (orgunits.organisationUnitGroups[j].name == this.locationSelector.value) {
+                                        ls = true;
+                                    }
+                                }
+                                if (this.locationSelector.value == "") {
+                                    ls = true;
+                                }
+                                if (os == true && ts == true && ls == true) {
+                                    this.filteredOrgunits.push(orgunits);
+                                    os = false;
+                                    ts = false;
+                                    ls = false;
+                                }
+                            }
+                        }
+                    })
+                )
+        }
     }
 }