UNPKG

@paperbits/core

Version:
50 lines (41 loc) 2.19 kB
import { TableCellViewModel } from "./tableCellViewModel"; import { IWidgetService, ViewModelBinder } from "@paperbits/common/widgets"; import { TableCellModel } from "../tableCellModel"; import { ViewModelBinderSelector } from "../../ko/viewModelBinderSelector"; import { Placeholder } from "../../placeholder/ko/placeholder"; import { StyleCompiler } from "@paperbits/common/styles"; import { Bag } from "@paperbits/common"; export class TableCellViewModelBinder implements ViewModelBinder<TableCellModel, TableCellViewModel> { constructor( private readonly viewModelBinderSelector: ViewModelBinderSelector, private readonly styleCompiler: StyleCompiler, private readonly widgetService: IWidgetService ) { } public stateToInstance(state: any, componentInstance: TableCellViewModel): void { componentInstance.styles(state.styles); componentInstance.role(state.role); componentInstance.widgets(state.widgets) } public async modelToState(model: TableCellModel, state: any, bindingContext: Bag<any>): Promise<void> { const promises = model.widgets.map(widgetModel => { const definition = this.widgetService.getWidgetDefinitionForModel(widgetModel); if (definition) { const bindingPromise = this.widgetService.createWidgetBinding(definition, widgetModel, bindingContext); return bindingPromise; } // legacy binding resolution const widgetViewModelBinder = this.viewModelBinderSelector.getViewModelBinderByModel(widgetModel); const bindingPromise = widgetViewModelBinder.modelToViewModel(widgetModel, null, bindingContext); return bindingPromise; }); const widgetViewModels = await Promise.all(promises); if (widgetViewModels.length === 0) { widgetViewModels.push(new Placeholder("Cell")); } state.role = model.role; state.widgets = widgetViewModels; if (model.styles) { state.styles = await this.styleCompiler.getStyleModelAsync(model.styles); } } }