UNPKG

apim-developer-portal2

Version:

API management developer portal

50 lines (38 loc) 1.79 kB
import { Contract } from "@paperbits/common"; import { IModelBinder } from "@paperbits/common/editing"; import { IPermalinkResolver } from "@paperbits/common/permalinks"; import { ProductListModel } from "./productListModel"; import { ProductListContract } from "./productListContract"; export class ProductListModelBinder implements IModelBinder<ProductListModel> { constructor(private readonly permalinkResolver: IPermalinkResolver) { } public canHandleModel(model: Object): boolean { return model instanceof ProductListModel; } public canHandleContract(contract: Contract): boolean { return contract.type === "product-list" || contract.type === "productList"; // for backward compatibility } public async contractToModel(contract: ProductListContract): Promise<ProductListModel> { const model = new ProductListModel(); model.layout = contract.itemStyleView; model.allowSelection = contract.allowSelection; if (contract.detailsPageHyperlink) { model.detailsPageHyperlink = await this.permalinkResolver.getHyperlinkFromContract(contract.detailsPageHyperlink); } return model; } public modelToContract(model: ProductListModel): Contract { const contract: ProductListContract = { type: "product-list", itemStyleView: model.layout, allowSelection: model.allowSelection, detailsPageHyperlink: model.detailsPageHyperlink ? { target: model.detailsPageHyperlink.target, targetKey: model.detailsPageHyperlink.targetKey } : null }; return contract; } }