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 { constructor(private readonly eventManager: EventManager) { } public async modelToViewModel(model: ProductListModel, viewModel?: ProductListViewModel, bindingContext?: Bag): Promise { 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; } }