first-npm-package-nicule
Version:
This isi first npm package
64 lines (51 loc) • 2.62 kB
text/typescript
import { Component, ContentChildren, Inject, Input, QueryList, ViewChildren } from '@angular/core';
import { FormFieldComponent } from './form-field.component';
import { FORM_OWNER } from './form-owner';
import { PARENT_FORM } from './parent-form';
import { Orderer, OrderingService } from '../services/ordering.service';
export class FormFieldsComponent {
orderer: Orderer;
set order(orderString: string) {
this.orderer = this.ordering.parse(orderString);
this.computeSortedJoinedFields();
}
externalFields: QueryList<FormFieldComponent>;
set contentFields(newFields: QueryList<FormFieldComponent>) {
this.externalFields = newFields;
this.computeSortedJoinedFields();
}
defaultFields: QueryList<FormFieldComponent>;
set viewFields(newFields: QueryList<FormFieldComponent>) {
this.defaultFields = newFields;
this.computeSortedJoinedFields();
}
joinedFields: Array<FormFieldComponent>;
computeSortedJoinedFields(): void {
const external = this.externalFields && this.externalFields.toArray() || [];
const defaults = this.defaultFields && this.defaultFields.toArray() || [];
const externalyDefinedFields = external.filter(({ named }) => !defaults.some(({ named: matchingNamed }) => matchingNamed === named));
const overrideFields = external.filter(({ named }) => defaults.some(({ named: matchingNamed }) => matchingNamed === named));
const defaultAndOverridenFields = defaults.map(field => overrideFields.find(({ named }) => named === field.named) || field);
const joinedFields = [...defaultAndOverridenFields, ...externalyDefinedFields]; // externaly defined fields are placed last
this.joinedFields = this.orderer && this.orderer.order(joinedFields) || joinedFields;
}
tackByName(_, { name }): any {
return name;
}
tackByNamed(_, { named }): any {
return named;
}
constructor( public form, private ordering: OrderingService) { }
}