@paperbits/core
Version:
Paperbits core components.
47 lines (36 loc) • 1.6 kB
text/typescript
import { Bag, Contract } from "@paperbits/common";
import { CollectionModelBinder, IModelBinder } from "@paperbits/common/editing";
import { IWidgetService, ModelBinderSelector } from "@paperbits/common/widgets";
import { GridCellContract } from "./gridCellContract";
import { GridCellModel } from "./gridCellModel";
const nodeType = "grid-cell";
export class GridCellModelBinder extends CollectionModelBinder implements IModelBinder<GridCellModel> {
constructor(
protected readonly widgetService: IWidgetService,
protected modelBinderSelector: ModelBinderSelector
) {
super(widgetService, modelBinderSelector);
}
public canHandleContract(contract: Contract): boolean {
return contract.type === nodeType;
}
public canHandleModel(model: Object): boolean {
return model instanceof GridCellModel;
}
public async contractToModel(contract: GridCellContract, bindingContext?: Bag<any>): Promise<GridCellModel> {
const gridCellModel = new GridCellModel();
gridCellModel.styles = contract.styles;
gridCellModel.role = contract.role;
gridCellModel.widgets = await this.getChildModels(contract.nodes, bindingContext);
return gridCellModel;
}
public modelToContract(model: GridCellModel): Contract {
const contract: GridCellContract = {
type: nodeType,
nodes: this.getChildContracts(model.widgets),
role: model.role,
styles: model.styles
};
return contract;
}
}