@paperbits/core
Version:
Paperbits core components.
48 lines (39 loc) • 1.9 kB
text/typescript
import { Bag, Contract } from "@paperbits/common";
import { CollectionModelBinder, IModelBinder } from "@paperbits/common/editing";
import { PopupContract, PopupService } from "@paperbits/common/popups";
import { IWidgetService, ModelBinderSelector } from "@paperbits/common/widgets";
import { PopupInstanceContract } from "./popupContract";
import { PopupInstanceModel } from "./popupModel";
export class PopupModelBinder extends CollectionModelBinder implements IModelBinder<PopupInstanceModel> {
constructor(
protected readonly widgetService: IWidgetService,
protected readonly modelBinderSelector: ModelBinderSelector,
private readonly popupService: PopupService
) {
super(widgetService, modelBinderSelector);
}
public canHandleContract(contract: Contract): boolean {
return contract.type === "popup";
}
public canHandleModel(model: Object): boolean {
return model instanceof PopupInstanceModel;
}
public async contractToModel(contract: PopupContract, bindingContext?: Bag<any>): Promise<PopupInstanceModel> {
const popupContent: PopupInstanceContract = <any>await this.popupService.getPopupContent(contract.key, bindingContext?.locale);
const model = new PopupInstanceModel();
model.key = contract.key;
model.styles = popupContent.styles;
model.backdrop = popupContent.backdrop;
model.widgets = await this.getChildModels(popupContent.nodes, bindingContext);
return model;
}
public modelToContract(model: PopupInstanceModel): PopupInstanceContract {
const contract: PopupInstanceContract = {
type: "popup",
styles: model.styles,
backdrop: model.backdrop,
nodes: this.getChildContracts(model.widgets)
};
return contract;
}
}