apim-developer-portal1
Version:
API management developer portal
48 lines (37 loc) • 1.78 kB
text/typescript
import { Contract } from "@paperbits/common";
import { IModelBinder } from "@paperbits/common/editing";
import { IPermalinkResolver } from "@paperbits/common/permalinks";
import { OperationListModel } from "./operationListModel";
import { OperationListContract } from "./operationListContract";
export class OperationListModelBinder implements IModelBinder<OperationListModel> {
constructor(private readonly permalinkResolver: IPermalinkResolver) { }
public canHandleContract(contract: Contract): boolean {
return contract.type === "operationList";
}
public canHandleModel(model: Object): boolean {
return model instanceof OperationListModel;
}
public async contractToModel(contract: OperationListContract): Promise<OperationListModel> {
const model = new OperationListModel();
model.allowSelection = contract.allowSelection;
model.defaultGroupByTagToEnabled = contract.defaultGroupByTagToEnabled === true;
if (contract.detailsPageHyperlink) {
model.detailsPageHyperlink = await this.permalinkResolver.getHyperlinkFromContract(contract.detailsPageHyperlink);
}
return model;
}
public modelToContract(model: OperationListModel): OperationListContract {
const contract: OperationListContract = {
type: "operationList",
allowSelection: model.allowSelection,
defaultGroupByTagToEnabled: model.defaultGroupByTagToEnabled,
detailsPageHyperlink: model.detailsPageHyperlink
? {
target: model.detailsPageHyperlink.target,
targetKey: model.detailsPageHyperlink.targetKey
}
: null
};
return contract;
}
}