UNPKG

@paperbits/core

Version:
53 lines (41 loc) 1.98 kB
import { Bag, Contract } from "@paperbits/common"; import { CollectionModelBinder, IModelBinder } from "@paperbits/common/editing"; import { IWidgetService, ModelBinderSelector } from "@paperbits/common/widgets"; import { TableCellContract } from "./tableCellContract"; import { TableCellModel } from "./tableCellModel"; import { LocalStyles } from "@paperbits/common/styles"; export class TableCellModelBinder extends CollectionModelBinder implements IModelBinder<TableCellModel> { constructor(protected readonly widgetService: IWidgetService, protected modelBinderSelector: ModelBinderSelector) { super(widgetService, modelBinderSelector); } /** * Migration to designated "table-cell" style plugin. */ private migrateTableStyles(styles: LocalStyles): void { if (!styles.instance["grid-cell"]) { return; } styles.instance["table-cell"] = styles.instance["grid-cell"]; delete styles.instance["grid-cell"]; if (styles.instance["table-cell"].xs) { // Reducing unnecessary viewport variations. styles.instance["table-cell"] = styles.instance["table-cell"].xs; } } public async contractToModel(contract: TableCellContract, bindingContext?: Bag<any>): Promise<TableCellModel> { const tableCellModel = new TableCellModel(); this.migrateTableStyles(contract.styles); tableCellModel.styles = contract.styles; tableCellModel.role = contract.role; tableCellModel.widgets = await this.getChildModels(contract.nodes, bindingContext); return tableCellModel; } public modelToContract(model: TableCellModel): Contract { const contract: TableCellContract = { type: "table-cell", nodes: this.getChildContracts(model.widgets), role: model.role, styles: model.styles }; return contract; } }