Project

General

Profile

1
import {Component, Input, ViewChild} from '@angular/core';
2
import {Observable}       from 'rxjs';
3
import { Router, ActivatedRoute} from '@angular/router';
4
import {Filter, Value,AdvancedField} from '../searchUtils/searchHelperClasses.class';
5
import {SearchOrganizationsService} from '../../services/searchOrganizations.service';
6
import {SearchResult}     from '../../utils/entities/searchResult';
7
import {ErrorCodes} from '../../utils/properties/errorCodes';
8
import {ErrorMessagesComponent}    from '../../utils/errorMessages.component';
9
import {AdvancedSearchPageComponent} from '../searchUtils/advancedSearchPage.component';
10
import {SearchFields, FieldDetails} from '../../utils/properties/searchFields';
11
import {SearchUtilsClass } from '../searchUtils/searchUtils.class';
12
import{EnvProperties} from '../../utils/properties/env-properties';
13

    
14

    
15
@Component({
16
    selector: 'advanced-search-organizations',
17
    template: `
18
    <advanced-search-page pageTitle="Advanced Search for Organizations" entityType="organization"
19
                 type = "organizations"
20
                 [(results)] = "results"
21
                 [(searchUtils)] = "searchUtils"
22
                 [(fieldIds)]="fieldIds" [(fieldIdsMap)]="fieldIdsMap"   [(selectedFields)]="selectedFields"
23
                 (queryChange)="queryChanged($event)"
24
                 [csvParams]="csvParams" csvPath="organizations" simpleSearchLink="/search/find/organizations"
25
                 [disableForms]="disableForms"
26
                 [loadPaging]="loadPaging"
27
                 [oldTotalResults]="oldTotalResults"  [piwikSiteId]=piwikSiteId
28
                 searchFormClass="organizationsSearchForm">
29
    </advanced-search-page>
30

    
31
    `
32
 })
33

    
34
export class AdvancedSearchOrganizationsComponent {
35
  private errorCodes: ErrorCodes;
36
  private errorMessages: ErrorMessagesComponent;
37
  properties:EnvProperties;
38
@Input() piwikSiteId = null;
39
  public results =[];
40
  public filters =[];
41
  public searchUtils:SearchUtilsClass = new SearchUtilsClass();
42
  public searchFields:SearchFields = new SearchFields();
43

    
44
  public fieldIds:  string[] = this.searchFields.ORGANIZATION_ADVANCED_FIELDS;
45
  public fieldIdsMap  = this.searchFields.ORGANIZATION_FIELDS;
46
  public selectedFields:AdvancedField[] =  [];
47
  public csvParams: string;
48
  public disableForms: boolean = false;
49
  public loadPaging: boolean = true;
50
  public oldTotalResults: number = 0;
51
  public pagingLimit: number = 0;
52
  public isPiwikEnabled;
53

    
54
  @ViewChild (AdvancedSearchPageComponent) searchPage : AdvancedSearchPageComponent ;
55

    
56
public resourcesQuery = "(oaftype exact organization)";
57
  constructor (private route: ActivatedRoute, private _searchOrganizationsService: SearchOrganizationsService ) {
58
    this.results =[];
59
    this.errorCodes = new ErrorCodes();
60
    this.errorMessages = new ErrorMessagesComponent();
61
    this.searchUtils.status = this.errorCodes.LOADING;
62

    
63

    
64

    
65
  }
66
  ngOnInit() {
67
    this.route.data
68
      .subscribe((data: { envSpecific: EnvProperties }) => {
69
        this.properties= data.envSpecific;
70
        this.searchUtils.baseUrl = data.envSpecific.searchLinkToAdvancedOrganizations;
71
         this.pagingLimit = data.envSpecific.pagingLimit;
72
         this.isPiwikEnabled = data.envSpecific.enablePiwikTrack;
73

    
74
      });
75
    //var errorCodes:ErrorCodes = new ErrorCodes();
76
    this.searchUtils.status = this.errorCodes.LOADING;
77

    
78
    this.sub =  this.route.queryParams.subscribe(params => {
79
      if(params['page'] && this.searchUtils.page != params['page']) {
80
        this.loadPaging = false;
81
        this.oldTotalResults = this.searchUtils.totalResults;
82
      }
83

    
84
      let page = (params['page']=== undefined)?1:+params['page'];
85
      this.searchUtils.page = ( page <= 0 ) ? 1 : page;
86

    
87
      this.searchUtils.size = (params['size']=== undefined)?10:+params['size'];
88
      if(this.searchUtils.size != 5 && this.searchUtils.size != 10 && this.searchUtils.size != 20 && this.searchUtils.size != 50) {
89
        this.searchUtils.size = 10;
90
      }
91

    
92
      this.searchPage.fieldIds = this.fieldIds;
93
      this.selectedFields =[];
94
      this.searchPage.selectedFields = this.selectedFields;
95
      this.searchPage.fieldIdsMap = this.fieldIdsMap;
96
      this.searchPage.getSelectedFiltersFromUrl(params);
97
      this.getResults(this.searchPage.createQueryParameters(),  this.searchUtils.page, this.searchUtils.size);
98

    
99
    });
100
  }
101
  ngOnDestroy() {
102
    this.sub.unsubscribe();
103
  }
104
  sub: any;
105
  public getResults(parameters:string, page: number, size: number){
106
    if(page > this.pagingLimit) {
107
      size=0;
108
    }
109
    if(page <= this.pagingLimit || this.searchUtils.status == this.errorCodes.LOADING) {
110
      if(parameters!= null && parameters != ''  ) {
111
        this.csvParams ="&fq=( "+this.resourcesQuery + "and (" + parameters + "))";
112
      }else{
113
        this.csvParams ="&fq="+this.resourcesQuery;
114
      }
115

    
116
      //var errorCodes:ErrorCodes = new ErrorCodes();
117
      this.searchUtils.status = this.errorCodes.LOADING;
118
      //this.searchPage.openLoading();
119
      this.disableForms = true;
120
      this.results = [];
121
      this.searchUtils.totalResults = 0;
122

    
123
      //console.info("Advanced Search for Organizations: Execute search query "+parameters);
124
       this._searchOrganizationsService.advancedSearchOrganizations(parameters, page, size, this.properties).subscribe(
125
        data => {
126
            this.searchUtils.totalResults = data[0];
127
            this.results = data[1];
128
            this.searchPage.updateBaseUrlWithParameters();
129
            //var errorCodes:ErrorCodes = new ErrorCodes();
130
            this.searchUtils.status = this.errorCodes.DONE;
131
            if(this.searchUtils.totalResults == 0 ){
132
              this.searchUtils.status = this.errorCodes.NONE;
133
            }
134
            //this.searchPage.closeLoading();
135
            this.disableForms = false;
136

    
137
            if(this.searchUtils.status == this.errorCodes.DONE) {
138
              // Page out of limit!!!
139
              let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size);
140
              if(!(Number.isInteger(totalPages))) {
141
                  totalPages = (parseInt(totalPages, 10) + 1);
142
              }
143
              if(totalPages < page) {
144
                this.searchUtils.totalResults = 0;
145
                this.searchUtils.status = this.errorCodes.OUT_OF_BOUND;
146
              }
147
            }
148
        },
149
        err => {
150
            //console.log(err);
151
            this.handleError("Error getting organizations", err);
152
            this.searchUtils.status = this.errorMessages.getErrorCode(err.status);
153

    
154
            //TODO check erros (service not available, bad request)
155
            // if( ){
156
            //   this.searchUtils.status = errorCodes.ERROR;
157
            // }
158
            //var errorCodes:ErrorCodes = new ErrorCodes();
159
            //this.searchUtils.status = errorCodes.NOT_AVAILABLE;
160
            /*if(err.status == '404') {
161
              this.searchUtils.status = this.errorCodes.NOT_FOUND;
162
            } else if(err.status == '500') {
163
              this.searchUtils.status = this.errorCodes.ERROR;
164
            } else {
165
              this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
166
            }*/
167

    
168
            //this.searchPage.closeLoading();
169
            this.disableForms = false;
170
        }
171
      );
172
    }
173
  }
174
  private setFilters(){
175
    //TODO set filters from
176
  }
177

    
178
  public queryChanged($event) {
179
    this.loadPaging = true;
180

    
181
    var parameters = $event.value;
182
    //this.getResults(parameters, this.searchUtils.page,this.searchUtils.size);
183
    //console.info("queryChanged: Execute search query "+parameters);
184

    
185
  }
186

    
187
  private handleError(message: string, error) {
188
    console.error("Organizations advanced Search Page: "+message, error);
189
  }
190
}
(5-5/14)