Project

General

Profile

1
import {Component, Input,Output, ElementRef, EventEmitter, ViewChild} from '@angular/core';
2
import {Observable}       from 'rxjs/Observable';
3
import {SearchProjectsService} from '../../services/searchProjects.service';
4
import {ProjectService} from '../../landingPages/project/project.service';
5
// import {ModalLoading} from '../../utils/modal/loading.component';
6
import { Subject } from 'rxjs/Subject';
7
import {ClaimProject} from './claimEntities.class';
8
declare var UIkit:any;
9
@Component({
10
    selector: 'claim-projects-search-form',
11
    // styleUrls:  ['/autoComplete.component.css'],
12

    
13
    template: `
14
    <div>
15
      <form class=" uk-animation  uk-padding-small uk-panel  uk-background-muted " >
16
                <table class="uk-width-1-1 uk-table uk-table-responsive" ><tr>
17
                <td  >
18
               Search for projects
19
               </td></tr>
20
                <tr><td >
21
                 <select   class=""  [(ngModel)]="selectedFunderId" name="select_funder"  >
22
                   <option  value="0" (click)="funderChanged('0','Select funder:')">Select funder:</option>
23
                   <option *ngFor="let  funder of funders"  [value]="funder.id" (click)="funderChanged(funder.id,funder.name)">{{funder.name}}</option>
24
                 </select></td><td  >
25
                <entities-autocomplete entityType="project" [funderId]="selectedFunderId"  [allowDuplicates]=true [showSelected]=false [placeHolderMessage] = "'Type Keywords..'" title = "Projects:"  [multipleSelections]=true  (addItem) = "select($event)" ></entities-autocomplete>
26
                </td></tr></table>
27
        </form>
28
        <!--modal-loading [message]= "'Loading...'"></modal-loading-->
29
        <!--div *ngIf="warningMessage.length > 0" class="alert alert-warning" role="alert">{{warningMessage}}</div>
30
        <div *ngIf="infoMessage.length > 0" class="alert alert-info" role="alert">{{infoMessage}}</div-->
31

    
32
    </div>
33
        `
34

    
35
})
36
export class ClaimProjectsSearchFormComponent {
37
   ngOnInit() {
38
     this.getFunders();
39
   }
40
  //  @ViewChild (ModalLoading) loading : ModalLoading ;
41

    
42
  // @Input() public inline: boolean = false ; // for claimed started from landing pages
43
  public query = '';
44
  @Input() public selectedProjects=[] ;
45
  public elementRef;
46

    
47
  public funders:string[];
48
  public selectedFunderId:string ="0";
49
  selectedFunderName:string ="Select funder:";
50
  @Output() projectSelected = new EventEmitter();
51

    
52
  public projects:string[];
53
  public warningMessage = "";
54
  public infoMessage = "";
55

    
56
  // public searchTermStream = new Subject<string>();
57
  // filtered: Observable<{}>   = this.searchTermStream
58
  // .debounceTime(300).distinctUntilChanged()
59
  // .switchMap((term: string) =>   this._projectService.searchForProjectsObs(term, this.selectedFunderId));
60
  public tries:number = 0 ;
61
  public keywordlimit = 3;
62

    
63
constructor(private _service: ProjectService, private _projectService: SearchProjectsService, myElement: ElementRef) {
64
    this.elementRef = myElement;
65
}
66

    
67

    
68
// search() {
69
//   console.info("heeere "+this.query );
70
//   this.infoMessage = "";
71
//   // this.filtered = [];
72
//   if(this.query == ""){
73
//     this.tries = 0;
74
//     this.warningMessage = "";
75
//   } else if(this.query && this.query.length < this.keywordlimit){
76
//     this.tries++;
77
//     if(this.tries == this.keywordlimit -1 ){
78
//       this.warningMessage = "Type at least " + this.keywordlimit + " characters";
79
//       this.tries = 0;
80
//     }
81
//   }else{
82
//     console.info("doo the search "+this.query );
83
//
84
//     this.tries = 0;
85
//     this.warningMessage = "";
86
//     this.searchTermStream.next(this.query);
87
//
88
//   }
89
//
90
// }
91
select(item){
92
    this.query = "";
93
    // this.searchTermStream.next(this.query); //clear
94
    item = item.value;
95
    var project: ClaimProject = new ClaimProject();
96
    project.funderId = (this.selectedFunderId=="0")?item.funderId:this.selectedFunderId;
97
    project.funderName = (this.selectedFunderId=="0")?item.funderName:this.selectedFunderName;
98
    project.projectId = item.id;
99
    project.projectName = item.projectName;
100
    project.projectAcronym = item.projectAcronym;
101
    project.startDate = item.startDate;
102
    project.endDate = item.endDate;
103
    project.code = item.code;
104
    project.jurisdiction = item.jurisdiction;
105
    project.fundingLevel0 = item.fundingLevel0;
106

    
107
    console.log(item);
108

    
109

    
110
    // this._service.getProjectDates(project.projectId).subscribe(
111
    //   data => {
112
    //       project.startDate = data.startDate;
113
    //       project.endDate = data.endDate;
114
    //   },
115
    //   err => console.log(err)
116
    // );
117
    var index:number =this.selectedProjects.indexOf(project);
118
    var found:boolean = false;
119
    this.warningMessage = "";
120

    
121
    for (var _i = 0; _i < this.selectedProjects.length; _i++) {
122
        let item = this.selectedProjects[_i];
123
        if(item.projectId == project.projectId){
124
              found=true;
125
              this.warningMessage = "Project already in selected list";
126
        }
127
     }
128

    
129
    if (!found) {
130
      this.selectedProjects.push(project);
131
      this.projectSelected.emit({
132
        value: true
133
      });
134
      UIkit.notification({
135
          message : 'A new project is selected.',
136
          status  : 'info',
137
          timeout : 1000,
138
          pos     : 'top-center'
139
      });
140
    }else{
141
      UIkit.notification({
142
          message : 'The project is already on your list.',
143
          status  : 'warning',
144
          timeout : 1000,
145
          pos     : 'top-center'
146
      });
147
    }
148

    
149
}
150
showItem(item):string{
151
  return ((item.field[1]['@value'])?item.field[1]['@value']+" - ":"" ) + item.field[3]['@value'];
152
}
153
remove(item){
154
  var index:number =this.selectedProjects.indexOf(item);
155
   if (index > -1) {
156
      this.selectedProjects.splice(index, 1);
157
  }
158

    
159
}
160
handleClick(event){
161
 var clickedComponent = event.target;
162
 var inside = false;
163
 do {
164
     if (clickedComponent === this.elementRef.nativeElement) {
165
         inside = true;
166
     }
167
    clickedComponent = clickedComponent.parentNode;
168
 } while (clickedComponent);
169

    
170
}
171
getFunders ()  {
172
  console.info("Getting Funders....");
173
  this._projectService.getFunders().subscribe(
174
    data => {
175
      this.funders = data[1];
176
      console.log("this.funders");
177
     },
178
    err => console.log(err)
179
  );
180
 }
181

    
182
  getProjects ()  {
183
    if(this.selectedFunderId != '0'){
184

    
185
    }
186
   }
187
funderChanged(funderId:string, funderName:string){
188
  this.selectedFunderId = funderId;
189
  this.selectedFunderName = funderName;
190
  console.info("Selected funder:"+this.selectedFunderId+ ' name:'+funderName );
191

    
192
}
193

    
194
}
(5-5/11)