@paperbits/core
Version:
Paperbits core components.
46 lines (38 loc) • 1.9 kB
text/typescript
import { TestimonialsViewModel } from "./testimonialsViewModel";
import { ViewModelBinder } from "@paperbits/common/widgets/IViewModelBinder";
import { TestimonialsModel } from "../testimonialsModel";
import { EventManager, Events } from "@paperbits/common/events";
import { Bag } from "@paperbits/common";
import { IWidgetBinding } from "@paperbits/common/editing";
import { ComponentFlow } from "@paperbits/common/components";
export class TestimonialsViewModelBinder implements ViewModelBinder<TestimonialsModel, TestimonialsViewModel> {
constructor(private readonly eventManager: EventManager) { }
public async modelToViewModel(model: TestimonialsModel, viewModel?: TestimonialsViewModel, bindingContext?: Bag<any>): Promise<TestimonialsViewModel> {
if (!viewModel) {
viewModel = new TestimonialsViewModel();
}
viewModel.textContent(model.textContent);
viewModel.allStarsCount(model.allStarsCount);
viewModel.starsCount(model.starsCount);
viewModel.author(model.author);
viewModel.authorTitle(model.authorTitle);
const binding: IWidgetBinding<TestimonialsModel, TestimonialsViewModel> = {
name: "testimonials",
displayName: "Testimonials",
layer: bindingContext?.layer,
model: model,
flow: ComponentFlow.Block,
draggable: true,
editor: "testimonials-editor",
applyChanges: async () => {
await this.modelToViewModel(model, viewModel, bindingContext);
this.eventManager.dispatchEvent(Events.ContentUpdate);
}
};
viewModel["widgetBinding"] = binding;
return viewModel;
}
public canHandleModel(model: TestimonialsModel): boolean {
return model instanceof TestimonialsModel;
}
}