Project

General

Profile

1
import {Component, Input, Output, EventEmitter, ElementRef} from '@angular/core';
2
import {Observable}       from 'rxjs/Observable';
3
import { Subject } from 'rxjs/Subject';
4

    
5
import {AdvancedField, OPERATOR} from '../searchUtils/searchHelperClasses.class';
6
import {SearchFields} from '../../utils/properties/searchFields';
7
import {Dates} from '../../utils/string-utils.class';
8

    
9
@Component({
10
    selector: 'advanced-search-form',
11
    template: `
12
        <form [class]="(isDisabled)?'uk-disabled':''">
13
        <table   >
14
            <tr *ngFor="let selectedField of selectedFields; let i = index" class="-row  ">
15
                    <td *ngIf ="i==0 " class="">Search for:</td>
16

    
17
                    <td *ngIf = "i != 0" class=""><select [(ngModel)]="selectedField.operatorId" name="selectOp_{{i}}" >
18
                          <option *ngFor="let op of operators" (change)="fieldOperatorChanged(i, op.id, op.id)" (click)="fieldOperatorChanged(i, op.id, op.id)" [value]="op.id">{{op.id}}</option>
19
                    </select></td>
20
                    <td ><select [(ngModel)]="selectedField.id" name="selectField_{{i}}"  (ngModelChange)="fieldIdsChanged(i,selectedField.id)" ><!--(click)="fieldIdsChanged(i)"  -->
21
                      <option *ngFor="let id of fieldIds"  [value]="id" >{{fieldIdsMap[id].name}} </option>
22
                    </select> </td>
23
                    <td *ngIf = "selectedField.type == 'keyword'"  ><input  type="text" class="form-control" placeholder="Type keywords..."
24
                        [(ngModel)]="selectedField.value" name="value[{{i}}]"></td>
25
                    <td *ngIf = "selectedField.type == 'date'" >
26
                    <date-filter [(dateValue)]=selectedField.dateValue ></date-filter>
27
                    </td>
28
                    <td *ngIf = " selectedField.id && selectedField.type == 'vocabulary'"  >
29
                      <static-autocomplete *ngIf = " selectedField.id" [(vocabularyId)] = selectedField.param [fieldId]=selectedField.id
30
                        [(list)] = this.fieldList[selectedField.id]  [entityName] = "entityType" [selectedValue]=selectedField.value [showSelected]=true
31
                         [placeHolderMessage] = "'Search for '+selectedField.name" [title] = "selectedField.name"   [multipleSelections]=false
32
                         (selectedValueChanged)="valueChanged($event,i)" (listUpdated) = "listUpdated($event,selectedField.id)"></static-autocomplete>
33
                    </td>
34
                    <td  *ngIf = "  selectedField.id &&  selectedField.type == 'refine'" >
35
                      <static-autocomplete [(list)] = this.fieldList[selectedField.id] [fieldId]=selectedField.id [entityName] = "entityType" [fieldName] = [selectedField.id] [selectedValue]=selectedField.value [showSelected]=true [placeHolderMessage] = "'Search for '+selectedField.name" [title] = "selectedField.name"  [multipleSelections]=false (selectedValueChanged)="valueChanged($event,i)" (listUpdated) = "listUpdated($event,selectedField.id)"></static-autocomplete></td>
36
                    <td  *ngIf = "selectedField.type == 'entity'"  ><entities-autocomplete  [fieldId]=selectedField.id [entityType]=selectedField.param   [selectedValue]=selectedField.value [showSelected]=true
37
                       [placeHolderMessage] = "'Search for '+selectedField.name" [title] = "selectedField.name"  [multipleSelections]=false
38
                        (selectedValueChanged)="valueChanged($event,i)" (listUpdated) = "listUpdated($event,selectedField.id)" >
39
                    </entities-autocomplete></td>
40

    
41
                    <td *ngIf = "selectedField.type == 'boolean'" class="input-group"  >
42
                       <span class="input-group-addon">
43
                          <input type="radio" [(ngModel)]="selectedField.value"  [name]=selectedField.param value="true">Yes<br>
44
                      </span>
45
                      <span class="input-group-addon">
46
                        <input type="radio" [(ngModel)]="selectedField.value"  [name]=selectedField.param value="false">No<br>
47
                      </span>
48
                  </td>
49
                  <td class=" " >
50
                    <button *ngIf="selectedFields.length > 1" type="button" class="uk-icon-button uk-button-danger" (click)="removeField(i)">
51
                      <span uk-icon="icon: minus"></span>
52
                    </button>
53
                    <button *ngIf="selectedFields.length == 1" type="button" class="uk-icon-button uk-button-danger"  disabled>
54
                      <span uk-icon="icon: minus"></span>
55
                    </button>
56
                  </td>
57
                  <td *ngIf="i == selectedFields.length-1 " class=" "><button type="button" class="uk-icon-button" (click)="addField()">
58
                      <span uk-icon="icon: plus"></span>
59
                  </button></td>
60
            </tr>
61
            </table>
62
            <div  class="-row uk-text-right">
63
              <button (click)="queryChanged()"  type="submit" class="uk-button uk-button-primary">Search</button>
64
            </div>
65

    
66
        </form>
67

    
68
    `
69
})
70
export class AdvancedSearchFormComponent {
71
  @Input() entityType;
72
  @Input() fieldIds:  string[];
73
  @Input() fieldIdsMap;
74
  @Input() selectedFields:AdvancedField[];
75
  @Input() isDisabled: boolean = false;
76

    
77
  @Output() queryChange  = new EventEmitter();
78
  newFieldId:string;
79
  newFieldName:string;
80
  fieldList:{[id:string]:any[]} = {};
81
  public searchFields:SearchFields = new SearchFields();
82

    
83
  public operators:  [{name:string, id:string}] = this.searchFields.ADVANCED_SEARCH_OPERATORS;
84
    constructor () {
85
     }
86

    
87
    ngOnInit() {
88
      for(var i = 0; i < this.fieldIds.length; i++){
89
        this.fieldList[this.fieldIds[i]]=[];
90
      }
91
      this.newFieldId = this.fieldIds[0];
92
      this.newFieldName = this.fieldIdsMap[this.newFieldId].name;
93
     }
94

    
95
    queryChanged() {
96
        this.queryChange.emit({
97
            // selectedFields: this.selectedFields,
98
            // selectedQuantifiers: this.selectedQuantifiers,
99
            // keywords: this.keywords
100
        });
101
    }
102

    
103
    addField() {
104
        this.newFieldId = this.fieldIds[0];
105
        var type = this.fieldIdsMap[this.newFieldId].type;
106
        if(type == "boolean"){
107
          this.selectedFields.push(new AdvancedField(this.newFieldId,this.fieldIdsMap[this.newFieldId].param, this.fieldIdsMap[this.newFieldId].name, type, "true", "and"));
108
        }else{
109
          this.selectedFields.push(new AdvancedField(this.newFieldId, this.fieldIdsMap[this.newFieldId].param,this.fieldIdsMap[this.newFieldId].name, type, "", "and"));
110
        }
111

    
112
    }
113

    
114
    removeField(index: number) {
115
        this.selectedFields.splice(index, 1);
116

    
117
    }
118

    
119
    fieldOperatorChanged(index: number, operatorId: string, operatorName: string) {
120
         this.selectedFields[index].operatorId = operatorId;
121
         this.selectedFields[index].operatorName = operatorName;
122
    }
123
    validateDate(index: number, value: string){
124
      this.selectedFields[index].valid = Dates.isValidYear(value);
125
    }
126

    
127
    fieldIdsChanged(index: number, fieldId:string ) {
128
      console.log("Field index::"+index + "  " + this.selectedFields[index].id + " function id:" +fieldId);
129

    
130
          var id= this.fieldIds[0];
131
          this.selectedFields[index].name = this.fieldIdsMap[id].name;
132
         this.selectedFields[index].type = this.fieldIdsMap[id].type;
133
         this.selectedFields[index].value = "";
134
         this.selectedFields[index].param = this.fieldIdsMap[id].param;
135

    
136
         var id =fieldId;//this.selectedFields[index].id;
137
         this.selectedFields[index].name = this.fieldIdsMap[id].name;
138
         this.selectedFields[index].type = this.fieldIdsMap[id].type;
139
         this.selectedFields[index].value = "";
140
         this.selectedFields[index].param = this.fieldIdsMap[id].param;
141
         if(this.fieldIdsMap[id].type == "boolean"){
142
           this.selectedFields[index].value = "true";
143
         }
144
    }
145
    valueChanged($event,index:number){
146
      this.selectedFields[index].value = $event.value;
147
    }
148
    listUpdated($event,fieldId:number){
149
      this.fieldList[fieldId] = $event.value;
150
    }
151

    
152
}
(1-1/28)