@paperbits/core
Version:
Paperbits core components.
67 lines (55 loc) • 2.45 kB
text/typescript
import * as ko from "knockout";
import * as Utils from "@paperbits/common";
import * as Objects from "@paperbits/common/objects";
import template from "./tabPanelEditor.html";
import { ViewManager } from "@paperbits/common/ui";
import { Component, Param, Event, OnMounted } from "@paperbits/common/ko/decorators";
import { TabPanelModel } from "../tabPanelModel";
import { SizeStylePluginConfig } from "@paperbits/styles/plugins";
import { ChangeRateLimit } from "@paperbits/common/ko/consts";
import { EventManager } from "@paperbits/common/events/eventManager";
import { Events } from "@paperbits/common/events";
export class TabPanelEditor {
public readonly sizeConfig: ko.Observable<SizeStylePluginConfig>;
constructor(
private readonly viewManager: ViewManager,
private readonly eventManager: EventManager
) {
this.sizeConfig = ko.observable<SizeStylePluginConfig>();
}
public model: TabPanelModel;
public onChange: (model: TabPanelModel) => void;
public async initialize(): Promise<void> {
this.updateObservables();
this.sizeConfig.extend(ChangeRateLimit).subscribe(this.applyChanges);
this.eventManager.addEventListener(Events.ViewportChange, this.updateObservables);
}
private updateObservables(): void {
const viewport = this.viewManager.getViewport();
const containerSizeStyles = Objects.getObjectAt<SizeStylePluginConfig>(`instance/size/${viewport}`, this.model.styles);
this.sizeConfig(containerSizeStyles);
}
/**
* Collecting changes from the editor UI and invoking callback method.
*/
private applyChanges(): void {
const viewport = this.viewManager.getViewport();
this.model.styles = this.model.styles || {};
if (this.model.styles.instance && !this.model.styles.instance.key) {
this.model.styles.instance.key = Utils.randomClassName();
}
const containerSizeStyles: SizeStylePluginConfig = this.sizeConfig();
Objects.setValue(`instance/size/${viewport}`, this.model.styles, containerSizeStyles);
this.onChange(this.model);
}
public onSizeUpdate(sizeConfig: SizeStylePluginConfig): void {
this.sizeConfig(sizeConfig);
}
}