Project

General

Profile

1
import {Component, Input} from '@angular/core';
2
import {ClaimEntity} from './claimHelper.class';
3

    
4
declare var UIkit: any;
5

    
6
@Component({
7
  selector: 'claim-results',
8
  template: `
9

    
10
    <ul *ngIf="results.length > 0 " class="uk-list uk-list-divider">
11
      <li *ngFor=" let entity of results " [class]="(isSelected(entity))?'uk-block-muted':''">
12
        <div>
13
          <div class="uk-text-muted">
14
            {{(!entity.result) ? entity.type : ((entity.result && entity.result.source == 'openaire') ? entity.type : (entity.result && entity.result.source + ' result'))}}
15
          </div>
16
          <div class="uk-grid">
17
            <div class="uk-width-expand">
18
              <claim-title [entity]="entity"></claim-title>
19
              <claim-result-metadata [entity]="entity"></claim-result-metadata>
20
              <claim-project-metadata [entity]="entity"></claim-project-metadata>
21
            </div>
22
            <div class="uk-margin-auto-vertical uk-padding-remove-left uk-margin-small-left" [title]="(this.selectedResults.length>=basketLimit)?'Basket reached the size limit':''">
23
              <a [class]="(this.selectedResults.length>=basketLimit)?'uk-icon-button uk-disabled':'uk-icon-button'" *ngIf="!isSelected(entity)" 
24
                 (click)="add(entity)">
25
                        <span class="uk-icon">
26
                        <svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" icon="plus"
27
                             ratio="1"><rect x="9" y="1" width="1" height="17"></rect><rect x="1" y="9" width="17"
28
                                                                                            height="1"></rect></svg>
29
                     </span>
30
              </a>
31
              <span *ngIf="isSelected(entity)" class="uk-icon-button portal-icon-button">
32
                     <span class="uk-icon" >
33
                      <svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" icon="check" ratio="1"><polyline fill="none" stroke="#000" stroke-width="1.1" points="4,10 8,15 17,4"></polyline></svg>
34
                     </span>
35
                </span>
36
            </div>
37
          </div>
38

    
39
        </div>
40
      </li>
41
    </ul>`,
42

    
43
})
44
export class ClaimResultsComponent {
45
  @Input() results: ClaimEntity[];
46
  @Input() selectedResults: ClaimEntity[];
47
  @Input() localStoragePrefix: string = "";
48
  @Input() basketLimit;
49
  private isSelected(result: ClaimEntity) {
50

    
51
    let found: boolean = false;
52
    const id = result.id;
53
    for (let _i = 0; _i < this.selectedResults.length; _i++) {
54
      let item = this.selectedResults[_i];
55
      if (item.id && item.id == id) {
56
        found = true;
57
        break;
58
      }
59
    }
60
    return found;
61
    // indexOf doesn't work when results came from
62
    // return this.selectedResults.indexOf(entity)!=-1;
63
  }
64

    
65
  add(item: ClaimEntity) {
66
    // if (this.selectedResults.length > this.basketLimit) {
67
    //   UIkit.notification({
68
    //     message: 'Your basket exceeds the number of allowed results (150)',
69
    //     status: 'warning',
70
    //     timeout: 1500,
71
    //     pos: 'top-center'
72
    //   });
73
    //   return;
74
    // }
75
    let found: boolean = this.isSelected(item);
76
    if (!found) {
77
      this.selectedResults.push(item);
78
      if (this.selectedResults != null) {
79
        localStorage.setItem(this.localStoragePrefix, JSON.stringify(this.selectedResults));
80
      }
81
    }
82
  }
83
}
(12-12/15)