import { Component, EventEmitter, Input } from '@angular/core';
import { CrudComponentObj } from '../index';
import { BaseComponent } from './base.component';
import { Service } from '../services/index';
import { Observable } from 'rxjs/Rx';
import { Http } from '@angular/http';
import * as $ from 'jquery';
@Component({
selector: 'selectCrudRestful',
template: `
`
})
export class SelectComponent extends BaseComponent {
lang: string;
@Input() broadcast: EventEmitter = new EventEmitter();
server : string = null;
constructor(public service: Service, private http: Http) {
super();
setTimeout(() => {
this.lang = this.translate.currentLang;
}, 50);
}
ngOnInit() {
this.readCommonsParameters(this.index);
this.loadData();
if (this.broadcast != undefined) {
this.broadcast.subscribe((value: any) => {
if (value) {
let newValue = value[this.property];
$("#" + this.id).val(newValue).change();
}
});
}
}
loadData() {
setTimeout(() => {
let crudComponentObj = CrudComponentObj.getComponents(this.clazzName)[this.index];
if (crudComponentObj.url) {
if (this.server == null) {
if (crudComponentObj.fileConfig != undefined) {
this.http.get(this.fileConfig).map(res => res.json())
.subscribe(config => {
let keys: string[] = this.fileConfigServerKey.split('.');
let server: any = null;
keys.forEach(key => {
if (server == null) {
server = config[key];
} else {
server = server[key];
}
});
this.server = server;
this.loadDataFromUrl(crudComponentObj, this.server);
});
} else {
this.loadDataFromUrl(crudComponentObj);
}
}
} else {
this.values.forEach(value => {
if (this.translateKeyByValue) {
if (value['labelTranslateKey'] == undefined) {
value['labelTranslateKey'] = value['label'];
value['label'] = this.translate.instant(value['label']);
} else {
value['label'] = this.translate.instant(value['labelTranslateKey']);
}
}
$("#" + this.id).val(crudComponentObj.value).change();
})
}
}, 100);
}
loadDataFromUrl(crudComponentObj: CrudComponentObj, server? : string) {
if (this.values != null && this.values.length > 0) {
return;
}
this.values = [];
let url;
if (server) {
url = server + crudComponentObj.url;
} else {
url = crudComponentObj.url;
}
this.getSelectValues(url)
.subscribe(values => {
let field = crudComponentObj.selectItemLabel;
values = values.sort((left, right): number => {
if (left[field] < right[field]) {
return -1;
} else if (left[field] > right[field]) {
return 1;
}
return 0;
});
if (crudComponentObj.initialValueKey != undefined) {
this.values.push({label: this.translate.instant(crudComponentObj.initialValueKey), value: '-1'});
} else if (crudComponentObj.initialValue != undefined) {
this.values.push({label: crudComponentObj.initialValue, value: '-1'});
}
values.forEach(val => {
this.values.push({ label: val[crudComponentObj.selectItemLabel], value: val[crudComponentObj.selectItemValue]});
});
if (crudComponentObj.initialValue != undefined) {
$("#" + this.id).val(crudComponentObj.initialValue).change();
} else if (crudComponentObj.defaultValue != undefined) {
setTimeout(() => {
$("#" + this.id).val(crudComponentObj.defaultValue).change();
}, 0);
}
},
error => {
console.log(error);
});
}
onChangeObj(value: any) {
CrudComponentObj.getComponents(this.clazzName)[this.index].value = value;
}
public notify(): void {
this.loadData();
}
getSelectValues(url: string): Observable {
return this.service.get(url);
}
}