@paperbits/common
Version:
Paperbits common components.
45 lines (32 loc) • 1.47 kB
text/typescript
import { Contract } from "@paperbits/common";
import { WidgetModel, ModelBinderSelector, IWidgetService } from "@paperbits/common/widgets";
export class CollectionModelBinder {
constructor(
protected readonly widgetService: IWidgetService,
protected readonly modelBinderSelector: ModelBinderSelector
) { }
public async getChildModels(nodes: Contract[] = [], bindingContext: any): Promise<any[]> {
if (!nodes) {
return [];
}
const modelPromises = nodes.map((contract: Contract) => {
let modelBinder = this.widgetService.getModelBinder(contract.type);
if (!modelBinder) { // switch to legacy model
modelBinder = this.modelBinderSelector.getModelBinderByContract<any>(contract);
}
return modelBinder.contractToModel(contract, bindingContext);
});
return await Promise.all<any>(modelPromises);
}
public getChildContracts(models: WidgetModel[]): Contract[] {
const nodes: Contract[] = [];
models.forEach(widgetModel => {
let modelBinder = this.widgetService.getModelBinderForModel(widgetModel);
if (!modelBinder) {
modelBinder = this.modelBinderSelector.getModelBinderByModel(widgetModel);
}
nodes.push(modelBinder.modelToContract(widgetModel));
});
return nodes;
}
}