@paperbits/core
Version:
Paperbits core components.
50 lines (43 loc) • 1.89 kB
text/typescript
import { Bag } from "@paperbits/common";
import { IModelBinder } from "@paperbits/common/editing";
import { IPermalinkResolver } from "@paperbits/common/permalinks";
import { PictureContract } from "./pictureContract";
import { PictureModel } from "./pictureModel";
export class PictureModelBinder implements IModelBinder<PictureModel> {
constructor(private readonly permalinkResolver: IPermalinkResolver) { }
public async contractToModel(contract: PictureContract, bindingContext: Bag<any>): Promise<PictureModel> {
const model = new PictureModel();
model.caption = contract.caption;
model.width = contract.width;
model.height = contract.height;
model.styles = contract.styles || { appearance: "components/picture/default" };
model.sourceKey = contract.sourceKey;
if (contract.hyperlink) {
try {
model.hyperlink = await this.permalinkResolver.getHyperlinkFromContract(contract.hyperlink, bindingContext?.locale);
}
catch (error) {
console.log(error);
}
}
return model;
}
public modelToContract(pictureModel: PictureModel): PictureContract {
const pictureContract: PictureContract = {
type: "picture",
caption: pictureModel.caption,
width: pictureModel.width,
height: pictureModel.height,
styles: pictureModel.styles,
sourceKey: pictureModel.sourceKey
};
if (pictureModel.hyperlink) {
pictureContract.hyperlink = {
target: pictureModel.hyperlink.target,
targetKey: pictureModel.hyperlink.targetKey,
triggerEvent: pictureModel.hyperlink.triggerEvent
};
}
return pictureContract;
}
}