import { Contract } from "@paperbits/common"; import { IModelBinder } from "@paperbits/common/editing"; import { IPermalinkResolver } from "@paperbits/common/permalinks"; import { ProductListModel } from "./subscriptionListModel"; import { ProductListContract } from "./subscriptionListContract"; export class SubscriptionListModelBinder implements IModelBinder { constructor(private readonly permalinkResolver: IPermalinkResolver) { } public canHandleModel(model: Object): boolean { return model instanceof ProductListModel; } public canHandleContract(contract: Contract): boolean { return contract.type === "subscription-list" || contract.type === "subscriptionList"; // for backward compatibility } public async contractToModel(contract: ProductListContract): Promise { 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: "subscription-list", itemStyleView: model.layout, allowSelection: model.allowSelection, detailsPageHyperlink: model.detailsPageHyperlink ? { target: model.detailsPageHyperlink.target, targetKey: model.detailsPageHyperlink.targetKey } : null }; return contract; } }