import { widgetName, defaultPageSize, defaultCustomFilterStartTime, defaultCustomFilterEndTime } from "./constants"; import { IModelBinder } from "@paperbits/common/editing"; import { ReportsByApiModel } from "./reportsByApiModel"; import { Contract } from "@paperbits/common"; import { ReportsByApiContract } from "./reportsByApiContract"; /** * This is a class that helps to prepare the model using data described * in the contract. */ export class ReportsByApiModelBinder implements IModelBinder { public canHandleContract(contract: Contract): boolean { return contract.type === widgetName; } public canHandleModel(model: any): boolean { return model instanceof ReportsByApiModel; } public async contractToModel(contract: ReportsByApiContract): Promise { const model = new ReportsByApiModel(); model.pageSize = contract.pageSize || defaultPageSize; model.customFilterStartTime = contract.customFilterStartTime || defaultCustomFilterStartTime; model.customFilterEndTime = contract.customFilterEndTime || defaultCustomFilterEndTime; return model; } public modelToContract(model: ReportsByApiModel): Contract { const contract: ReportsByApiContract = { type: widgetName, pageSize: model.pageSize, customFilterStartTime: model.customFilterStartTime, customFilterEndTime: model.customFilterEndTime, }; return contract; } }