UNPKG

@paperbits/core

Version:
53 lines (40 loc) 1.85 kB
import { SectionContract } from "./sectionContract"; import { SectionModel } from "./sectionModel"; import { CollectionModelBinder, IModelBinder } from "@paperbits/common/editing"; import { Contract, Bag } from "@paperbits/common"; import { SecurityModelBinder } from "@paperbits/common/security"; export class SectionModelBinder implements IModelBinder<SectionModel> { public canHandleContract(contract: Contract): boolean { return contract.type === "layout-section"; } public canHandleModel(model: Object): boolean { return model instanceof SectionModel; } constructor( private readonly containerModelBinder: CollectionModelBinder, private readonly securityModelBinder: SecurityModelBinder<any, any> ) { } public async contractToModel(contract: SectionContract, bindingContext?: Bag<any>): Promise<SectionModel> { const model = new SectionModel(); contract.nodes = contract.nodes || []; model.styles = contract.styles || {}; model.widgets = await this.containerModelBinder.getChildModels(contract.nodes, bindingContext); if (contract.security) { model.security = await this.securityModelBinder.contractToModel(contract.security); } return model; } public modelToContract(model: SectionModel): SectionContract { const contract: SectionContract = { type: "layout-section", styles: model.styles, nodes: [] }; if (model.security) { contract.security = this.securityModelBinder.modelToContract(model.security); } const childNodes = this.containerModelBinder.getChildContracts(model.widgets); contract.nodes.push(...childNodes); return contract; } }