apim-developer-portal4
Version:
API management developer portal
42 lines (33 loc) • 1.56 kB
text/typescript
import { Bag } from "@paperbits/common";
import { ViewModelBinder } from "@paperbits/common/widgets";
import { EventManager } from "@paperbits/common/events";
import { ProductListViewModel } from "./subscriptionListViewModel";
import { ProductListModel } from "../subscriptionListModel";
export class SubscriptionListViewModelBinder implements ViewModelBinder<ProductListModel, ProductListViewModel> {
constructor(private readonly eventManager: EventManager) { }
public async modelToViewModel(model: ProductListModel, viewModel?: ProductListViewModel, bindingContext?: Bag<any>): Promise<ProductListViewModel> {
if (!viewModel) {
viewModel = new ProductListViewModel();
}
viewModel.layout(model.layout);
viewModel.runtimeConfig(JSON.stringify({
allowSelection: model.allowSelection,
detailsPageUrl: model.detailsPageHyperlink
? model.detailsPageHyperlink.href
: undefined
}));
viewModel["widgetBinding"] = {
displayName: "List of products",
model: model,
editor: "subscription-list-editor",
applyChanges: async (updatedModel: ProductListModel) => {
await this.modelToViewModel(updatedModel, viewModel, bindingContext);
this.eventManager.dispatchEvent("onContentUpdate");
}
};
return viewModel;
}
public canHandleModel(model: ProductListModel): boolean {
return model instanceof ProductListModel;
}
}