apim-developer-portal4
Version:
API management developer portal
54 lines (44 loc) • 2.11 kB
text/typescript
import { Bag } from "@paperbits/common";
import { EventManager } from "@paperbits/common/events";
import { IWidgetBinding } from "@paperbits/common/editing";
import { widgetName, widgetDisplayName, widgetEditorSelector } from "../constants";
import { ReportsByApiViewModel } from "./reportsByApiViewModel";
import { ViewModelBinder } from "@paperbits/common/widgets";
import { ReportsByApiModel } from "../reportsByApiModel";
/**
* This class describes how the model needs to be presented (as a view model)
* in a specific UI framework.
*/
export class ReportsByApiViewModelBinder implements ViewModelBinder<ReportsByApiModel, ReportsByApiViewModel> {
constructor(private readonly eventManager: EventManager) { }
public async updateViewModel(model: ReportsByApiModel, viewModel: ReportsByApiViewModel): Promise<void> {
viewModel.runtimeConfig(JSON.stringify({
pageSize: model.pageSize,
customFilterStartTime: model.customFilterStartTime,
customFilterEndTime: model.customFilterEndTime,
}));
}
public async modelToViewModel(model: ReportsByApiModel, viewModel?: ReportsByApiViewModel, bindingContext?: Bag<any>): Promise<ReportsByApiViewModel> {
if (!viewModel) {
viewModel = new ReportsByApiViewModel();
const binding: IWidgetBinding<ReportsByApiModel> = {
name: widgetName,
displayName: widgetDisplayName,
readonly: bindingContext ? bindingContext.readonly : false,
model: model,
editor: widgetEditorSelector,
draggable: true,
applyChanges: async () => {
await this.updateViewModel(model, viewModel);
this.eventManager.dispatchEvent("onContentUpdate");
}
};
viewModel["widgetBinding"] = binding;
}
this.updateViewModel(model, viewModel);
return viewModel;
}
public canHandleModel(model: ReportsByApiModel): boolean {
return model instanceof ReportsByApiModel;
}
}