apim-developer-portal2
Version:
API management developer portal
50 lines (39 loc) • 1.87 kB
text/typescript
import { Contract } from "@paperbits/common";
import { IModelBinder } from "@paperbits/common/editing";
import { ListOfApisModel } from "./listOfApisModel";
import { ListOfApisContract } from "./listOfApisContract";
import { IPermalinkResolver } from "@paperbits/common/permalinks";
export class ListOfApisModelBinder implements IModelBinder<ListOfApisModel> {
constructor(private readonly permalinkResolver: IPermalinkResolver) { }
public canHandleModel(model: Object): boolean {
return model instanceof ListOfApisModel;
}
public async contractToModel(contract: ListOfApisContract): Promise<ListOfApisModel> {
const model = new ListOfApisModel();
model.layout = contract.itemStyleView;
model.allowSelection = contract.allowSelection;
model.defaultGroupByTagToEnabled = contract.defaultGroupByTagToEnabled === true;
if (contract.detailsPageHyperlink) {
model.detailsPageHyperlink = await this.permalinkResolver.getHyperlinkFromContract(contract.detailsPageHyperlink);
}
return model;
}
public canHandleContract(contract: Contract): boolean {
return contract.type === "listOfApis";
}
public modelToContract(model: ListOfApisModel): Contract {
const contract: ListOfApisContract = {
type: "listOfApis",
itemStyleView: model.layout,
allowSelection: model.allowSelection,
defaultGroupByTagToEnabled: model.defaultGroupByTagToEnabled,
detailsPageHyperlink: model.detailsPageHyperlink
? {
target: model.detailsPageHyperlink.target,
targetKey: model.detailsPageHyperlink.targetKey
}
: null
};
return contract;
}
}