Project

General

Profile

1
import {Component, Input, ViewChild} from '@angular/core';
2
import {ActivatedRoute, Router} from '@angular/router';
3
import {Location} from '@angular/common';
4
import {SearchDataprovidersService} from '../services/searchDataproviders.service';
5
import {ErrorCodes} from '../utils/properties/errorCodes';
6
import {ErrorMessagesComponent}    from '../utils/errorMessages.component';
7
import {SearchFields} from '../utils/properties/searchFields';
8

    
9
import {SearchCustomFilter, SearchUtilsClass} from '../searchPages/searchUtils/searchUtils.class';
10
import {EnvProperties} from '../utils/properties/env-properties';
11
import {ZenodoInformationClass} from "./utils/zenodoInformation.class";
12
import {RouterHelper} from "../utils/routerHelper.class";
13
import {Breadcrumb} from "../utils/breadcrumbs/breadcrumbs.component";
14

    
15
@Component({
16
  selector: 'deposit-search-dataproviders',
17
  template: `
18

    
19
    <div class="uk-section uk-padding-remove-bottom uk-padding-remove-top">
20
      <div class="explorePanelBackground communityPanelBackground uk-margin-top uk-padding-small">
21
        <div class="uk-container uk-container-large uk-margin-small-top uk-margin-small-bottom">
22
          <!--<ul class="uk-breadcrumb">
23
            <li><a class="breadcrumb" routerLinkActive="router-link-active" [routerLink]="depositLearnHowPage"
24
                   [queryParams]="properties.environment!='development'?{}:routerHelper.createQueryParam('communityId',communityId)">
25
              Deposit
26
            </a></li>
27
            <li><span class="active uk-text-bold">Browse content providers</span></li>
28
          </ul>-->
29
          <breadcrumbs  [light]="!!(this.communityId)" [breadcrumbs]="breadcrumbs"></breadcrumbs>
30
        </div>
31
      </div>
32
    </div>
33
    <div class="communityBackground">
34
      <div class="uk-container uk-container-large">
35

    
36
        <form 
37
              class="uk-margin-top uk-grid uk-margin-small-left ng-untouched ng-pristine ng-valid uk-form-width-large uk-float-right">
38
 
39
          <div class=" uk-padding-remove-left uk-margin-small-top uk-inline uk-width-expand">
40
            <a *ngIf="keyword.length > 0" class="uk-form-icon uk-form-icon-flip"
41
               (click)="keyword = ''"
42
               uk-icon="icon: close"></a>
43
            <input type="text" class="uk-input text-input-box uk-width-expand"
44
                   placeholder="Search by name, description, subject..." aria-describedby="sizing-addon2"
45
                   [(ngModel)]="keyword" name="keyword">
46
          </div>
47
          <!--<div class="uk-padding-remove-left uk-margin-small-top">
48
            <button (click)="keywordChanged()" type="submit"
49
                    class=" uk-button  portal-button  uk-text-bold ">
50
              Search
51
            </button>
52
          </div>-->
53
          <button (click)="keywordChanged()" type="submit"
54
                  class="portal-button uk-margin-small-left uk-margin-small-top uk-button">Search
55
          </button>
56
 
57
        </form>
58
      </div>
59
      <search-dataproviders  [simpleView]="true" type="deposit" simpleSearchLink="/participate/deposit/search" [includeOnlyResultsAndFilter]="true" >
60
      </search-dataproviders>
61
    </div>
62
    `
63
})
64
export class SearchDataprovidersToDepositComponent {
65
  private errorCodes: ErrorCodes;
66
  private errorMessages: ErrorMessagesComponent;
67
  @Input() piwikSiteId = null;
68
  public results =[];
69
  public filters =[];
70
  public totalResults:number  = 0 ;
71
  public baseUrl:string;
72
  public searchUtils:SearchUtilsClass = new SearchUtilsClass();
73
  public sub: any; public subResults: any;
74
  public _location:Location;
75
  public searchFields:SearchFields = new SearchFields();
76
  public refineFields: string[] =  this.searchFields.DEPOSIT_DATASOURCE_REFINE_FIELDS;
77
  public fieldIdsMap= this.searchFields.DEPOSIT_DATASOURCE_FIELDS;
78
  public keywordFields = this.searchFields.DEPOSIT_DATASOURCE_KEYWORD_FIELDS;
79
  public csvParams: string;
80

    
81
  public disableForms: boolean = false;
82
  public loadPaging: boolean = true;
83
  public oldTotalResults: number = 0;
84
  pagingLimit = 0;
85

    
86
  properties:EnvProperties;
87

    
88
  // @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ;
89

    
90
  @Input() public communityId: string = null;
91
  @Input() public zenodoInformation: ZenodoInformationClass = new ZenodoInformationClass();
92

    
93
  depositLearnHowPage: string = null;
94
  public routerHelper:RouterHelper = new RouterHelper();
95
  breadcrumbs:Breadcrumb[] = [];
96
  parameters = {};
97
  keyword  = "";
98
  constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService, private router: Router) {
99
    this.errorCodes = new ErrorCodes();
100
    this.errorMessages = new ErrorMessagesComponent();
101
    this.searchUtils.status = this.errorCodes.LOADING;
102
    this.searchUtils.page =1;
103
  }
104

    
105
  public ngOnInit() {
106

    
107
    this.route.data
108
      .subscribe((data: { envSpecific: EnvProperties }) => {
109
        this.properties = data.envSpecific;
110
        this.depositLearnHowPage = this.properties.depositLearnHowPage;
111
        this.baseUrl = this.properties.depositSearchPage;
112
        this.pagingLimit = this.properties.pagingLimit;
113
        this.breadcrumbs.push({name: 'home', route: '/'}, {
114
          name: "Deposit",
115
          route: this.depositLearnHowPage
116
        }, {name: "Browse repositories", route: null});
117
      });
118
     this.sub =  this.route.queryParams.subscribe(params => {
119
       this.keyword = params["fv0"]?params["fv0"]:'';
120
      });
121
    // this.searchPage.refineFields = this.refineFields;
122
    // this.searchPage.fieldIdsMap = this.fieldIdsMap;
123
    // this.searchPage.keywordFields = this.keywordFields;
124
    // var firstLoad =true;
125
    //
126
    // this.sub =  this.route.queryParams.subscribe(params => {
127
    //   this.loadPaging = true;
128
    //   if(params['page'] && this.searchUtils.page != params['page']) {
129
    //     this.loadPaging = false;
130
    //     this.oldTotalResults = this.searchUtils.totalResults;
131
    //   }
132
    //
133
    //   this.searchUtils.keyword = (params['keyword']?params['keyword']:'');
134
    //   var refine = true;
135
    //   if(this.searchUtils.page != ((params['page']=== undefined)?1:+params['page']) && this.filters && !firstLoad){
136
    //     refine = false;
137
    //
138
    //   }
139
    //   firstLoad = false;
140
    //   this.searchUtils.page = (params['page']=== undefined)?1:+params['page'];
141
    //   this.searchUtils.size = (params['size']=== undefined)?5:+params['size'];
142
    //   if(this.searchUtils.size != 5 && this.searchUtils.size != 10 && this.searchUtils.size != 20 && this.searchUtils.size != 50) {
143
    //     this.searchUtils.size = 5;
144
    //   }
145
    //   this.searchPage.usedBy = "deposit";
146
    //   var queryParameters = this.searchPage.getQueryParametersFromUrl(params);
147
    //   this._getResults(queryParameters, refine, this.searchUtils.page, this.searchUtils.size);
148
    // });
149
  }
150

    
151
  public ngOnDestroy() {
152
    if(this.sub){
153
      this.sub.unsubscribe();
154
    }
155
    if(this.subResults){
156
      this.subResults.unsubscribe();
157
    }
158
  }
159
  keywordChanged(){
160

    
161
    if ( this.keyword.length > 0) {
162
      this.parameters["fv0"] = this.keyword;
163
      this.parameters["f0"] = "q";
164
    }else{
165
      delete this.parameters['fv0'];
166
      delete this.parameters['f0'];
167
    }
168

    
169
    this.router.navigate([this.properties.depositSearchPage], {queryParams: this.parameters} );
170
  }
171
  /*public getResults(keyword:string,refine:boolean, page: number, size: number){
172
    var parameters = "";
173
    if(keyword.length > 0){
174
      //parameters = "q="+ keyword;
175

    
176
      if(this.keywordFields.length > 0) {
177
        parameters = "&fq=";
178
      }
179

    
180
      for(let i=0; i< this.keywordFields.length ; i++) {
181
        if(i > 0) {
182
          parameters += " or ";
183
        }
184
        let field = this.keywordFields[i];
185
        parameters += field.name+field.equalityOperator+StringUtils.URIEncode(this.searchUtils.keyword);
186
      }
187
    }
188
    this._getResults(parameters,refine,page, size);
189
  }
190
  private _getResults(parameters:string,refine:boolean, page: number, size: number){
191
    if(page > this.pagingLimit) {
192
      size=0;
193
    }
194
    if(page <= this.pagingLimit || this.searchUtils.status == this.errorCodes.LOADING) {
195
      this.csvParams = parameters;
196

    
197
      this.searchUtils.status = this.errorCodes.LOADING;
198

    
199
      this.disableForms = true;
200
      this.results = [];
201
      this.searchUtils.totalResults = 0;
202

    
203
      this.subResults = this._searchDataprovidersService.searchDataprovidersForDepositSearch(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, this.searchPage.getFields(),this.properties, "deposit").subscribe(
204
        data => {
205
          this.searchUtils.totalResults = data[0];
206
          this.results = data[1];
207
          if(refine){
208
            this.filters = data[2];
209
          }
210
          this.searchPage.checkSelectedFilters(this.filters);
211
          this.searchPage.updateBaseUrlWithParameters(this.filters);
212
          this.searchUtils.status = this.errorCodes.DONE;
213
          if(this.searchUtils.totalResults == 0 ){
214
            this.searchUtils.status = this.errorCodes.NONE;
215
          }
216
          this.disableForms = false;
217

    
218
          if(this.searchUtils.status == this.errorCodes.DONE) {
219
            // Page out of limit!!!
220
            let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size);
221
            if(!(Number.isInteger(totalPages))) {
222
              totalPages = (parseInt(totalPages, 10) + 1);
223
            }
224
            if(totalPages < page) {
225
              this.searchUtils.totalResults = 0;
226
              this.searchUtils.status = this.errorCodes.OUT_OF_BOUND;
227
            }
228
          }
229
        },
230
        err => {
231
          this.handleError("Error getting content providers", err);
232
          this.searchUtils.status = this.errorMessages.getErrorCode(err.status);
233

    
234
          this.disableForms = false;
235
        }
236
      );
237
    }
238
  }
239
*/
240

    
241
  private handleError(message: string, error) {
242
    console.error("Content Providers simple Search Page: "+message, error);
243
  }
244
}
(7-7/11)