@paperbits/core
Version:
Paperbits core components.
39 lines (29 loc) • 1.35 kB
text/typescript
import { Bag, Contract } from "@paperbits/common";
import { IModelBinder } from "@paperbits/common/editing";
import { PopupContract } from "@paperbits/common/popups";
import { PopupHostContract } from "./popupHostContract";
import { PopupHostModel } from "./popupHostModel";
import { PopupModelBinder } from "./popupModelBinder";
export class PopupHostModelBinder implements IModelBinder<PopupHostModel> {
constructor(private readonly popupModelBinder: PopupModelBinder) { }
public canHandleContract(contract: Contract): boolean {
return contract.type === "popup-host";
}
public canHandleModel(model: Object): boolean {
return model instanceof PopupHostModel;
}
public async contractToModel(contract: PopupHostContract, bindingContext?: Bag<any>): Promise<PopupHostModel> {
const model = new PopupHostModel();
if (!contract.popups) {
contract.popups = [];
}
const modelPromises = contract.popups.map((popupContract: PopupContract) => {
return this.popupModelBinder.contractToModel(popupContract, bindingContext);
});
model.widgets = await Promise.all<any>(modelPromises);
return model;
}
public modelToContract(): Contract {
throw new Error("Not implemented.");
}
}