import { Contract } from "@paperbits/common"; import { IModelBinder } from "@paperbits/common/editing"; import { IPermalinkResolver } from "@paperbits/common/permalinks"; import { ProductApisModel } from "./productApisModel"; import { ProductApisContract } from "./productApisContract"; export class ProductApisModelBinder implements IModelBinder { constructor(private readonly permalinkResolver: IPermalinkResolver) { } public canHandleContract(contract: Contract): boolean { return contract.type === "product-apis"; } public canHandleModel(model: Object): boolean { return model instanceof ProductApisModel; } public async contractToModel(contract: ProductApisContract): Promise { const model = new ProductApisModel(); if (contract.detailsPageHyperlink) { model.detailsPageHyperlink = await this.permalinkResolver.getHyperlinkFromContract(contract.detailsPageHyperlink); } return model; } public modelToContract(model: ProductApisModel): ProductApisContract { const contract: ProductApisContract = { type: "product-apis", detailsPageHyperlink: model.detailsPageHyperlink ? { target: model.detailsPageHyperlink.target, targetKey: model.detailsPageHyperlink.targetKey } : null }; return contract; } }