UNPKG

@paperbits/core

Version:
53 lines (42 loc) 2.2 kB
import { TabPanelItemViewModel } from "./tabPanelItemViewModel"; import { IWidgetService, ViewModelBinder } from "@paperbits/common/widgets"; import { TabPanelItemModel } from "../tabPanelModel"; import { ViewModelBinderSelector } from "../../ko/viewModelBinderSelector"; import { Placeholder } from "../../placeholder/ko/placeholder"; import { StyleCompiler } from "@paperbits/common/styles"; import { Bag } from "@paperbits/common"; import { stat } from "fs"; export class TabPanelItemViewModelBinder implements ViewModelBinder<TabPanelItemModel, TabPanelItemViewModel> { constructor( private readonly viewModelBinderSelector: ViewModelBinderSelector, private readonly styleCompiler: StyleCompiler, private readonly widgetService: IWidgetService ) { } public stateToInstance(state: any, componentInstance: TabPanelItemViewModel): void { componentInstance.styles(state.styles); componentInstance.label(state.label); componentInstance.widgets(state.widgets); } public async modelToState(model: TabPanelItemModel, 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("Tab")); } state.label = model.label || "Tab"; state.widgets = widgetViewModels; if (model.styles) { state.styles = await this.styleCompiler.getStyleModelAsync(model.styles); } } }