assets/angular/shared/form/field-relatedobjectdata.component.ts
Component to display information from related objects within ReDBox
selector | rb-relatedobjectdata |
Properties |
field |
field:
|
Type : RelatedObjectDataField
|
import { Input, Component, OnInit, Inject, Injector} from '@angular/core';
import { SimpleComponent } from './field-simple.component';
import { FieldBase } from './field-base';
import { FormGroup, FormControl, Validators } from '@angular/forms';
import * as _ from "lodash-lib";
import { RecordsService } from './records.service';
/**
* Contributor Model
*
*
* @author <a target='_' href='https://github.com/shilob'>Shilo Banihit</a>
*
*/
export class RelatedObjectDataField extends FieldBase<any> {
showHeader: boolean;
validators: any;
enabledValidators: boolean;
relatedObjects: object[];
hasInit: boolean;
recordsService: RecordsService;
columns: object[];
constructor(options: any, injector: any) {
super(options, injector);
this.relatedObjects = [];
this.columns = options['columns'] || [];
var relatedObjects = this.relatedObjects;
this.value = options['value'] || this.setEmptyValue();
this.recordsService = this.getFromInjector(RecordsService);
var that = this;
_.forEach(this.value, (item:any) => {
this.recordsService.getRecordMeta(item.id).then(function (meta) {
that.relatedObjects.push(meta);
});
});
}
createFormModel(valueElem: any = undefined): any {
if (valueElem) {
this.value = valueElem;
}
this.formModel = new FormControl(this.value || []);
if (this.value) {
this.setValue(this.value);
}
return this.formModel;
}
setValue(value:any) {
this.formModel.patchValue(value, {emitEvent: false });
this.formModel.markAsTouched();
}
setEmptyValue() {
this.value = [];
return this.value;
}
}
// Setting the template url to a constant rather than directly in the component as the latter breaks document generation
const template = '../angular/shared/form/field-relatedobjectdata.html';
/**
* Component to display information from related objects within ReDBox
*
*
*
*
*/
@Component({
selector: 'rb-relatedobjectdata',
templateUrl: template
})
export class RelatedObjectDataComponent extends SimpleComponent {
field: RelatedObjectDataField;
}