Project

General

Profile

1 43769 argiro.kok
import {Component, Input, Output, EventEmitter} from '@angular/core';
2
import {Observable}       from 'rxjs/Observable';
3
import { Subject } from 'rxjs/Subject';
4
5 44309 argiro.kok
import {AdvancedField, OPERATOR} from '../searchUtils/searchHelperClasses.class';
6
import {SearchFields} from '../../utils/properties/searchFields';
7 43769 argiro.kok
8
@Component({
9
    selector: 'advanced-search-form',
10
    template: `
11 44309 argiro.kok
        <form class="">
12
            <div *ngFor="let selectedField of selectedFields; let i = index" class="form-group  form-inline">
13
                <div *ngIf = "i != 0" class="input-group">
14 44349 argiro.kok
                    <button  type="button" id="dropdownMenu1" data-toggle="dropdown" class="btn btn-default dropdown-toggle" aria-haspopup="true" aria-expanded="true">
15 44343 argiro.kok
                        {{selectedField.operatorId}}
16 44309 argiro.kok
                    </button>
17
                    <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
18
                        <li *ngFor="let op of operators">
19 44343 argiro.kok
                            <a (click)="fieldOperatorChanged(i, op.id, op.id)">{{op.id}}</a>
20 44309 argiro.kok
                        </li>
21
                    </ul>
22
                </div>
23 43769 argiro.kok
                <div class="input-group">
24
                    <div class="input-group-btn">
25 44349 argiro.kok
                    <button  class="btn btn-default btn-disabled"  type="button">
26
                        {{selectedField.name}}
27
                    </button>
28
                        <!--button aria-expanded="false" aria-haspopup="true" class="btn btn-default dropdown-toggle" data-toggle="dropdown" id="dropdownMenu1" type="button">
29 44309 argiro.kok
                            {{selectedField.name}}
30 43769 argiro.kok
                        </button>
31
                        <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
32 44309 argiro.kok
                            <li *ngFor="let id of fieldIds">
33 44374 argiro.kok
                                <a (click)="fieldIdsChanged(i, id)">{{fieldIdsMap[id].name}}</a>
34 43769 argiro.kok
                            </li>
35 44349 argiro.kok
                        </ul-->
36 43769 argiro.kok
                    </div>
37 44374 argiro.kok
                    <input *ngIf = "fieldIdsMap[selectedField.id].type == 'keyword'"  type="text" class="form-control" placeholder="Type keywords..." [(ngModel)]="selectedField.value" name="value[{{i}}]">
38 43769 argiro.kok
39
40 44374 argiro.kok
                    <div *ngIf = "fieldIdsMap[selectedField.id].type == 'vocabulary'" class="input-group">
41
                    <static-autocomplete2  [(vocabularyId)] = selectedField.id [(list)] = this.fieldList[selectedField.id]  [entityName] = "entityType" [selectedValue]=selectedField.value [showSelected]=true [placeHolderMessage] = "'Search for '+selectedField.name" title = "Languages:"  [multipleSelections]=false (selectedValueChanged)="valueChanged($event,i)" (listUpdated) = "listUpdated($event,selectedField.id)"></static-autocomplete2>
42 44343 argiro.kok
                    </div>
43 44374 argiro.kok
                    <div *ngIf = "fieldIdsMap[selectedField.id].type == 'refine'" class="input-group">
44
                    <static-autocomplete2 [(list)] = this.fieldList[selectedField.id] [entityName] = "entityType" [fieldName] = fieldIdsMap[selectedField.id].indexField [selectedValue]=selectedField.value [showSelected]=true [placeHolderMessage] = "'Search for '+selectedField.name" title = "Languages:"  [multipleSelections]=false (selectedValueChanged)="valueChanged($event,i)" (listUpdated) = "listUpdated($event,selectedField.id)"></static-autocomplete2>
45 44343 argiro.kok
                    </div>
46 44383 argiro.kok
                    <div *ngIf = "fieldIdsMap[selectedField.id].type == 'boolean'" class="input-group">
47
                       <span class="input-group-addon">
48
                          <input type="radio" [(ngModel)]="selectedField.value"  [name]=selectedField.id value="true">Yes<br>
49
                      </span>
50
                      <span class="input-group-addon">
51
                        <input type="radio" [(ngModel)]="selectedField.value"  [name]=selectedField.id value="false">No<br>
52
                      </span>
53
                  </div>
54 43769 argiro.kok
                </div>
55
56 44349 argiro.kok
57 44309 argiro.kok
                <button type="button" class="btn btn-danger" *ngIf="selectedFields.length > 1" (click)="removeField(i)">
58 43769 argiro.kok
                    <span class="glyphicon glyphicon-minus" aria-hidden="true"></span>
59
                </button>
60
            </div>
61 44349 argiro.kok
            <div  class="form-group  form-inline">
62
              <div class=" input-group">
63
                  <div class="input-group-btn">
64
                    <button aria-expanded="false" aria-haspopup="true" class="btn btn-default dropdown-toggle" data-toggle="dropdown" id="dropdownMenu1" type="button">
65 44374 argiro.kok
                      {{fieldIdsMap[newFieldId].name}}
66 44349 argiro.kok
                    </button>
67
                    <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
68
                        <li *ngFor="let id of fieldIds">
69 44374 argiro.kok
                            <a (click)="fieldIdsChanged(i, id)">{{fieldIdsMap[id].name}}</a>
70 44349 argiro.kok
                        </li>
71
                    </ul>
72
                  </div>
73
                  <button type="button" class="btn btn-success" (click)="addField()">
74
                      <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
75
                  </button>
76
              </div>
77
            </div>
78 43769 argiro.kok
79
80
81 44309 argiro.kok
            <button (click)="queryChanged()"  type="submit" class="btn btn-default">Search</button>
82 43769 argiro.kok
        </form>
83
84
    `
85
})
86 44343 argiro.kok
///[style.width]="'120px'"
87 43769 argiro.kok
export class AdvancedSearchFormComponent {
88 44343 argiro.kok
  @Input() entityType;
89 44309 argiro.kok
  @Input() fieldIds:  string[];
90 44372 argiro.kok
  @Input() fieldIdsMap:{ [key:string]:{ name:string, operator:string, type:string, indexField:string }} ;
91 44309 argiro.kok
  @Input() selectedFields:AdvancedField[];
92
  @Output() queryChange  = new EventEmitter();
93 44349 argiro.kok
  newFieldId:string;
94
  fieldList:{[id:string]:any[]} = {};
95 44309 argiro.kok
  private searchFields:SearchFields = new SearchFields();
96 43769 argiro.kok
97 44343 argiro.kok
  private operators:  [{name:string, id:string}] = this.searchFields.ADVANCED_SEARCH_OPERATORS;
98 43769 argiro.kok
    constructor () {
99 44349 argiro.kok
      console.log("Constr: Advanced search form");
100 44087 argiro.kok
     }
101 43769 argiro.kok
102
    ngOnInit() {
103 44349 argiro.kok
      console.log("Init: Advanced search form");
104
      for(var i = 0; i < this.fieldIds.length; i++){
105
        this.fieldList[this.fieldIds[i]]=[];
106
      }
107
      this.newFieldId = this.fieldIds[0];
108 44087 argiro.kok
     }
109 43769 argiro.kok
110 44309 argiro.kok
    queryChanged() {
111
        this.queryChange.emit({
112
            // selectedFields: this.selectedFields,
113
            // selectedQuantifiers: this.selectedQuantifiers,
114
            // keywords: this.keywords
115 43769 argiro.kok
        });
116
    }
117
118 44309 argiro.kok
    addField() {
119 44372 argiro.kok
        console.info("add filter"+this.fieldIds[0]+this.fieldIdsMap[this.fieldIds[0]].name+this.fieldIdsMap[this.fieldIds[0]].type);
120 44383 argiro.kok
        var type = this.fieldIdsMap[this.newFieldId].type;
121
        if(type == "boolean"){
122
          this.selectedFields.push(new AdvancedField(this.newFieldId, this.fieldIdsMap[this.newFieldId].name, type, "true", "and"));
123
        }else{
124
          this.selectedFields.push(new AdvancedField(this.newFieldId, this.fieldIdsMap[this.newFieldId].name, type, "", "and"));
125
        }
126 44309 argiro.kok
127 43769 argiro.kok
    }
128
129 44309 argiro.kok
    removeField(index: number) {
130 43769 argiro.kok
        console.info("remove filter");
131
        this.selectedFields.splice(index, 1);
132 44309 argiro.kok
133 43769 argiro.kok
    }
134
135 44309 argiro.kok
    fieldOperatorChanged(index: number, operatorId: string, operatorName: string) {
136
         this.selectedFields[index].operatorId = operatorId;
137
         this.selectedFields[index].operatorName = operatorName;
138 43769 argiro.kok
    }
139
140 44309 argiro.kok
    fieldIdsChanged(index: number,id) {
141 44349 argiro.kok
         this.newFieldId = id;
142
        //  this.selectedFields[index].id = id;
143 44374 argiro.kok
        //  this.selectedFields[index].name = this.fieldIdsMap[id].name;
144 44349 argiro.kok
        // //  this.selectedFields[index].type = "keyword";
145 44374 argiro.kok
        //  this.selectedFields[index].type = this.fieldIdsMap[id].type;
146 44349 argiro.kok
        //  this.selectedFields[index].value = "";
147 43769 argiro.kok
    }
148 44343 argiro.kok
    valueChanged($event,index:number){
149
      this.selectedFields[index].value = $event.value;
150
    }
151 44349 argiro.kok
    listUpdated($event,fieldId:number){
152
      this.fieldList[fieldId] = $event.value;
153
    }
154 43769 argiro.kok
}