UNPKG

@paperbits/core

Version:
48 lines (39 loc) 1.9 kB
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; } }